코드의 시간 복잡도에 대해 궁금합니다!
284
작성한 질문수 6
function solution(str, t) {
let answer;
const counts = {};
const formatted = [...str];
formatted.forEach((char, i) => {
if (counts[char]) {
return counts[char].push(i);
}
counts[char] = [];
counts[char].push(i);
});
const tIndexs = counts[t];
answer = formatted.reduce((store, cur, i) => {
const tmp = [];
tIndexs.forEach((index) => {
tmp.push(Math.abs(index - i));
});
store.push(Math.min(...tmp));
return store;
}, []);
return answer.join(' ');
}
let str = 'teachermode';
console.log(solution(str, 'e'));
입력값의 크기 N마다 tIndex만큼 반복하니까 O(N^2) 인지
아니면 O(N)의 시간복잡도를 갖는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
DevLuna님, 주신 코드의 시간 복잡도에 대해 질문해주셨군요.
우선 주어진 코드를 분석하면 formatted.forEach와 내부의 tIndexs.forEach로 인해 2중 반복 구조를 갖고 있습니다. 여기서 formatted는 입력 문자열 str을 배열로 변환한 것이고, tIndexs는 문자열 str 내에 있는 문자 t의 인덱스를 모아둔 배열입니다.
시간 복잡도를 계산할 때 핵심은 입력 크기 N에 대해 연산이 얼마나 많이 발생하는지를 봐야 합니다. formatted.forEach는 입력 문자열 길이인 N에 비례하여 한 번 실행되며, 내부의 tIndexs.forEach는 문자 t의 발생 빈도에 비례하여 실행됩니다. 문자 t의 발생 빈도가 최악의 경우 입력 문자열 길이인 N에 비례할 수 있기 때문에, 최악의 경우 이 코드는 O(N^2)의 시간 복잡도를 가집니다. 하지만 평균적인 경우나 문자 t의 발생 빈도가 고정된 상수라고 가정할 때는 O(N)에 가깝게 작동할 수도 있습니다.
정확한 시간 복잡도는 문자 t의 발생 빈도에 따라 달라질 수 있으므로 코드를 실행하는 입력값의 특성을 고려해야 합니다.
continue를 사용하는 이유
0
79
2
정렬 가능 여부 판단하기
0
64
2
알고리즘 학습법 관련해서 질문드립니다.
0
86
1
코드 리뷰 부탁드립니다!
0
90
1
indexOf를 사용해서 풀어보았습니다 !!
0
68
1
저는 이런식으로 구현 해보았습니다 !!
0
64
1
12,13,14 강의 소리만 나오고 검은 화면입니다
0
100
3
반복문 최소화하고 indexOf 사용해서 풀어봤습니다
0
63
1
영상 보기 전에 직접 풀어봤습니다.
0
74
1
섹션1의 17번문제 이 풀이로 풀어도 될까요?
0
135
2
정규표현식으로 처리해도 상관없나요 ?
0
120
2
3칸씩 건너뛸 수 있을 경우
0
125
2
강의에 대해 질문있습니다.
0
135
2
Object와 Set을 이용해 풀어봤습니다.
0
117
2
이렇게 해도 되나요?
0
102
2
선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.
0
145
2
이렇게 풀어도 괜찮을까요?
0
138
1
이렇게 풀어도 괜찮을까요?
0
112
1
모든 아나그램 찾기에서 시간복잡도
0
98
1
코드리뷰 부탁드립니다.
0
130
1
for loop 탈출은 return 문으로 해도 되지 않나요?
0
133
1
투포인트알고리즘으로 풀어봤습니다.
0
142
0
코드 리뷰 부탁드립니다.
0
120
1
코드 맞게 작성한 거 아닌가여??
0
146
1





