728x90
반응형
SMALL
문제설명 : 문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.

이전에 풀었던 코드
function solution(s) {
var answer = [];
const arr = s.split('');
arr.forEach((alpha,i)=>{
const gap = arr.slice(0,i).lastIndexOf(alpha);
if(gap===-1){
answer.push(gap);
}else{
answer.push(i-gap);
}
})
return answer;
}
매 for문마다 lastIndexOf를 해서 index를 찾음
개선된 코드 : 해시맵을 사용하여 최근 등장 위치만 기억
function solution(s) {
const lastSeen = {}; // 문자: 마지막 인덱스
const result = [];
for (let i = 0; i < s.length; i++) {
const char = s[i];
if (lastSeen[char] === undefined) {
result.push(-1);
} else {
result.push(i - lastSeen[char]);
}
lastSeen[char] = i;
}
return result;
}LIST
'CS > 알고리즘' 카테고리의 다른 글
| [해시] PGS lv2. 의상 (0) | 2025.09.14 |
|---|---|
| [연습문제] PGS lv2. 행렬의 곱셈 (0) | 2025.09.14 |
| [해시] PGS lv2. 전화번호 목록 (0) | 2025.09.10 |
| [월간 코드 챌린지 시즌3] PGS lv2. n^2 배열자르기 (0) | 2025.09.08 |
| [월간 코드 챌린지 시즌2] PGS lv2. 괄호 회전하기 (0) | 2025.09.07 |