문제
나의 풀이
이 문제를 보고 가장 처음 든 생각은 파라미터로 주어진 문자열 n을 한 글자씩 나눠서 새로운 문자가 나올 때 -1을 리턴해줘야 하는데 '어떻게, 새로운 문자가 나왔다!'라는 것을 표현해줄까? 라는 생각이 들었다.
그에 대한 해답으로 문자열의 문자 하나하나를 돌리기 전에 newStr을 빈 문자열로 지정해 준 뒤에 각 문자열이 newStr에 없으면 -1을 answer라는 배열에 넣어주고 newStr에는 현재의 문자를 넣어주는 식으로 반복문을 돌렸다.
반대로 문자열이 존재한다면 그 문자열의 인덱스와 현재 인덱스의 차이만큼을 빼준 값을 answer에 넣으면 되겠다고 생각했다. 하지만 현재의 문자의 위치와 그 전 현재의 문자와 같은 문자의 위치의 차를 구하는 것은 어려웠다.
현재의 문자 위치는 당연하게도 newStr의 맨 뒷부분일테지만 이 문자와 똑같은 문자를 찾는 것은 어려웠다.
lastIndexOf로 현재 문자의 인덱스를 찾고 lastIndexOf(s)의 2번째를 찾고 싶었는데 결국 방법을 못찾았다.
(내 생각으로는 'lastIndexOf(s)의 2번째 인덱스 번호 - lastIndexOf(s) 1번째 인덱스 번호'를 하면 답이 나올 것 같았다)
그래서 일단은 다음과 같은 방법으로 썼다.
현재 문자는 lastIndexOf(s), lastIndexOf의 2번째는 newStr.lastIndexOf(s,newStr.lastIndexOf(s)-1)를 해서 현재 인덱스 위치를 제외한 다음 글자부터 s를 찾게하여 2번째 인덱스를 찾아줬다.
풀긴했지만 .... 너무 찝찝하다.......
하지만 방법을 못찾겠어.... lastIndexOf의 두번째 값을 찾는 메서드 같은 건 없는 걸까..
(charAt, /gi 같은 걸 봤는데 이건 아닌 것 같아)
function solution(str){
let answer = [];
let newStr ="";
for(let s of str){
if(newStr.includes(s)===false){
newStr += s;
answer.push(-1);
} else {
newStr += s;
answer.push(newStr.lastIndexOf(s) - newStr.lastIndexOf(s,newStr.lastIndexOf(s)-1))
}
}
return answer;
}
'Algorithm' 카테고리의 다른 글
두 개 뽑아서 더하기 [프로그래머스] (0) | 2023.10.19 |
---|---|
푸드 파이트 대회 [프로그래머스] (1) | 2023.10.17 |
[1차] 비밀지도 [프로그래머스] (2) | 2023.10.16 |
정수 내림차순으로 배치하기 [프로그래머스] (1) | 2023.10.16 |
정수 제곱근 판별 [프로그래머스] (0) | 2023.10.16 |