https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✓ 풀이과정
1. 전달되는 keymap을 알파벳 하나씩 순회하며 Map에 (alphabet, index) 형태로 저장하는데 중복되는 알파벳이면 더 적은 index로 다시 저장해서 알파벳별로 최소 index를 저장
2. targets를 돌면서 1에서 저장해둔 알파벳의 index를 찾아서 합산하여 저장하는데 이 값이 0이라면 -1을 저장
✓ 최종코드
function solution(keymap, targets) {
let answer = [];
let keys = new Map();
for (const key of keymap) {
for (let j = 0; j < key.length; j++) {
let char = key[j];
if (!keys.has(char) || keys.get(char) > j) {
keys.set(char, j);
}
}
}
for (const target of targets) {
let cnt = 0;
for (const char of target) {
if (!keys.has(char)) {
cnt = -1;
break;
}
cnt += keys.get(char) + 1;
}
answer.push(cnt);
}
return answer;
}
중복되는 알파벳은 [최소 index = 키를 최소로 누를 수 있는 횟수]로 저장해서 Map으로 가지고 한 target 당 누르는 횟수만 저장해서 배열로 반환하면 되는 문제였는데 이전 문제들을 해결하면서 Map을 사용해봤던 경험 덕분에 생각보다 수월하게 해결할 수 있었던 것 같습니다!
'프로그래머스 > Lv1' 카테고리의 다른 글
| [프로그래머스/Javascript] Lv.1 옹알이 (0) | 2026.01.27 |
|---|---|
| [프로그래머스/Javascript] Lv.1 소수 찾기 (0) | 2026.01.26 |
| [프로그래머스/Javascript] Lv.1 문자열 나누기 (0) | 2026.01.21 |
| [프로그래머스/Javascript] Lv.1 둘만의 암호 (0) | 2026.01.20 |
| [프로그래머스/Javascript] Lv.1 2016년 (0) | 2026.01.19 |