가장 가까운 같은 글자, Javascript

cptkuk91·2023년 3월 8일
1

Algorithm

목록 보기
154/161
post-custom-banner

문제

https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=javascript

코드

function solution(s) {
    let result = [];
    let tmp = [];
    
    for(let i = 0; i < s.length; i++){
        if(!tmp.includes(s[i])){
            result.push(-1);
            tmp.push(s[i]);
        } else if(tmp.includes(s[i])){
            result.push(i - tmp.lastIndexOf(s[i]));
            tmp.push(s[i]);
        }
        
    }
    return result;
}

풀이

우선 이 문제의 핵심은 lastIndexOf를 사용할 줄 아냐?가 중요하다고 생각합니다. 코딩테스트를 연습하면서 점점 다양한 method를 요구하고 있습니다. 아무튼.. 코드만 다시 설명을 하자면, 문자열 s를 for문을 통해 돌려버리고, 만약 tmp 임시배열에 s[i]를 포함하고 있지 않다면 결과값에는 -1을 tmp 배열에는 s[i]를 넣어줍니다. 만약 tmp 임시배열에 s[i]를 포함하고 있다면!! 여기가 중요합니다. 현재 문자열에서 s[i]를 비교할 때 i자리에 존재하고 있기 때문에 i - tmp.lastIndexOf(s[i])를 활용해 tmp 가장 마지막에 있는 같은 단어를 찾습니다. 그 이유는 banana라고 했을 때, a가 1,3에 위치해 있습니다. 가장 마지막에 위치한 a는 이전에 나온 a와 비교해야하기 때문에 숫자 1이 아닌 3과 비교해야합니다. 따라서 lastIndexOf를 사용해줘야 합니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글