목차
반응형
문제 설명
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
- b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
- n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
- a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
제한 조건
- 1 ≤ s의 길이 ≤ 10,000
- s은 영어 소문자로만 이루어져 있습니다.
- s은 영어 소문자로만 이루어져 있습니다.
나의 풀이
function solution(s) {
let answer = [];
let checkChar = [];
s.split('').forEach((char, i) => {
if (checkChar.includes(char)) {
answer.push(i - checkChar.lastIndexOf(char));
} else {
answer.push(-1);
}
checkChar.push(char);
});
console.log(answer);
return answer;
}
마무리
s를 일단 문자열로 바꾼 후 forEach를 통해 반복문을 돈다. 이전 글자와의 비교를 위한 checkChar배열 안에 현재 문자열이 있는지 확인 하고, 있다면 현재 문자열의 인덱스 번호부터 위치를 거꾸로 구해 answer에 push한다. 그리고 현재 문자열을 비교 배열인 checkChar에 추가한다. 이렇게 모든 문자열을 반복하여 최종적으로 answer를 리턴한다.
반응형