문제 :
내 풀이 :
function solution(s) {
const lastIndex = {};
const answer = [];
for (let i = 0; i < s.length; i++) {
if (lastIndex[s[i]] !== undefined) {
answer.push(i - lastIndex[s[i]]);
} else {
answer.push(-1);
}
lastIndex[s[i]] = i;
}
return answer;
}
lastIndex 객체:
- 각 문자의 마지막 등장 위치를 저장. lastIndex[s[i]]를 통해 해당 문자가 이전에 어디에서 등장했는지 빠르게 접근할 수 있다.
for 루프:
- 문자열을 순회하면서 문자가 이전에 등장한 적이 있는지 확인한다. lastIndex[s[i]] !== undefined를 통해 그 문자가 처음 등장한 것인지 아닌지 확인할 수 있다.
- 이전에 등장했다면 현재 인덱스와 마지막 등장 위치의 차이를 계산하여 answer에 저장한다. 처음 등장한 문자라면 -1을 추가한다.
마지막 등장 위치 갱신:
- 각 문자가 처리된 후, 해당 문자의 마지막 등장 위치를 lastIndex[s[i]] = i로 갱신한다. 이렇게 하면 이후 등장할 때 정확한 이전 위치를 참조할 수 있다.
'프로그래머스' 카테고리의 다른 글
[JavaScript] 명예의 전당 - 프로그래머스 (1) | 2024.09.25 |
---|---|
[JavaScript] 푸드 파이트 대회 - 프로그래머스 (0) | 2024.09.19 |
[JavaScript] 두 개 뽑아서 더하기 - 프로그래머스 (0) | 2024.09.10 |
[JavaScript] 크기가 작은 부분 문자열 - 프로그래머스 (3) | 2024.08.28 |
[JavaScript] 최소직사각형 - 프로그래머스 (0) | 2024.08.27 |