내가 푼 것
function solution(s) {
let s2=s.split('');
s=s.split('');
for(let i=0; i<s.length; i++) {
for(let j=i+1; j<s2.length; j++){
if(s[i] === s2[j]) {
s2[j] = j-i;
break;
}
}
if(typeof(s2[i]) === 'string') s2[i] = -1
}
return s2
}
남들이 푼 것
const solution = (s) =>
[...s].map((char, i) => {
const count = s.slice(0, i).lastIndexOf(char);
return count < 0 ? count : i - count;
});
간단해 보인다.
lastIndexOf() 메서드는 문자열에서 특정 문자 또는 문자열이 마지막으로 나타나는 인덱스를 반환하는 메서드
그래서 string s를 배열로 만든 후 map으로 돌려서 slice를 하는데, index까지 자르면서 그 slice에서 char와 같은 문자를 가진 index를 count에 넣는다.
만약 없으면 -1을 반환한다.
그렇기 때문에 -1 or index(확인하려는 char)에서 slice한 곳에서 char와 같은 문자열을 가진 index를 빼서 그 차이를 넣는다.
후 나는 왜 이걸 생각을 못할까.ㅠ