function solution(s) {
var answer = [];
let str = s.split("");
for (let i = 0; i < str.length; i++) {
// 현재 문자가 처음 등장하는 경우
if (s.indexOf(str[i]) === i) {
answer.push(-1);
} else {
// 이미 등장한 경우, 현재 위치와 첫 등장 위치의 차이 저장
answer.push(i - s.lastIndexOf(str[i], i - 1));
}
}
return answer;
}
이번 문제를 풀면서 lastIndexOf()에 대해 공부했다.
mdn 문서를 보면 해당 메서드는
lastIndexOf(searchElement, fromIndex)
Array 인스턴스의 lastIndexOf() 메서드는 배열에서 특정 요소를 찾을 수 있는 마지막 인덱스를 반환하거나,
해당 요소가 없으면 -1을 반환합니다.
배열은 fromIndex에서 시작하여 역방향으로 검색됩니다.
라고 되어있다. 두번째 인자의 사용이 좀 헷갈리는데 아래 제시한 예문을 보면
const numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
두번째 인자는 탐색하는 시작 위치의 인덱스이며, 역순으로 searchElement가 있는 위치를 찾는다.
numbers.lastIndexOf(2, -2)는 배열에서 2를 찾을 건데 -2번째의 위치에서 시작하니 9의 위치에서 시작한다. 그렇게 역순으로 탐색할때 가장 처음 등장하는 위치가 맨처음 0번째 인덱스인 것이다.
'JavaScript' 카테고리의 다른 글
[프로그래머스 Lv.1] k번째 수 (0) | 2024.11.08 |
---|---|
[프로그래머스 Lv.1] 문자열 내 마음대로 정렬하기 javascript (1) | 2024.11.06 |
[프로그래머스 Lv.1] 숫자 문자열과 영단어 (0) | 2024.11.04 |
[프로그래머스 Lv.1] 시저 암호/두개 뽑아서 더하기 javascript (0) | 2024.11.01 |
[프로그래머스 Lv.1] 최소직사각형 (0) | 2024.10.31 |