본문 바로가기
JavaScript

[프로그래머스 Lv.1] 가장 가까운 같은 숫자 javascript

by 어느새벽 2024. 11. 5.
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번째 인덱스인 것이다.