🔗 링크
https://school.programmers.co.kr/learn/courses/30/lessons/142086
📄 문제
문자열 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. 첫 글자는 무조건 처음 온 알파벳이므로 -1
2. 문자열을 돌면서 이미 있는 알파벳인지 확인하고
도무지 모르겠어서 여기저기 검색하고 lastIndexOf()를 사용해야 한다는 것을 알았다.
1. 정답을 담을 answer배열과 s의 알파벳을 차례로 담을 strArr을 각각 선언
2. strArr배열에 s의 알파벳을 순서대로 하나씩 담는데,
3. 담기 전에 s에 이미 s[i]가 있는지 확인해서
4. 없으면 -1을 answer에 담고
5. 있으면 i (현재 인덱스)에서 strArr에 담겨있는 s[i]의 lastIndexOf() 를 빼서 strArr에 담아준다.
💡 뭘 써야 할까
// lastIndexOf
🚀 답
function solution(s) {
let answer = [];
let strArr = [];
for(let i=0; i<s.length; i++){
if(!strArr.includes(s[i])){
answer.push(-1)
strArr.push(s[i])
}else{
answer.push(i-strArr.lastIndexOf(s[i]))
strArr.push(s[i])
}
}
return answer;
}
사실 lastIndexOf()를 알고나서도 어떻게 사용해야 하는지 감이 안잡혀서 많이 헤맸다.
'알고리즘' 카테고리의 다른 글
| JS) 짝수는 싫어요 (0) | 2025.01.08 |
|---|---|
| JS) 최빈값 구하기 (0) | 2025.01.07 |
| JS) 두 개 뽑아서 더하기 (0) | 2024.10.08 |
| JS) K번째 수 (0) | 2024.10.02 |
| JS) 숫자 문자열과 영단어 (0) | 2024.09.26 |