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를 사용해줘야 합니다.