🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/160586
✏️ 풀이
function solution(keymap, targets) {
const minimumCountMap = keymap
.reduce((acc, v) => ({
...acc,
...[...v].reduce((keyAcc, char, i) => ({
...keyAcc,
[char]: Math.min(
(keyAcc[char] ?? Number.MAX_VALUE),
(acc[char] ?? Number.MAX_VALUE),
i + 1
)
}), {})
}), {});
return targets
.map(target => {
let sum = 0;
for (const char of target) {
const minimumCount = minimumCountMap[char];
if (!minimumCount) {
return -1;
}
sum += minimumCount;
}
return sum;
});
}
먼저 keymap을 순회하면서 각 알파벳과 그 알파벳을 입력하기 위해 키를 눌러야 하는 최소 횟수의 map을 만든다.
예를 들어 keymap이 ["ABACD", "BCEFD"]일 때 minimumCountMap은 아래와 같은 형태가 된다.
{ A: 1, B: 1, C: 2, D: 5, E: 3, F: 4 }
이 minimumCountMap을 바탕으로 targets를 순회한다. targets의 문자열을 또 순회하면서 각 알파벳별로 miniumCountMap을 통해 최소 횟수를 구하여 모두 더하여 출력한다. 이 때, 단 하나의 알파벳이라도 minimumCountMap에 없다면 입력할 수 없는 문자열이므로 즉시 -1을 반환하도록 하였다.
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 1] 개인정보 수집 유효기간 - JavaScript (0) | 2024.05.19 |
---|---|
[프로그래머스 Level 2] 전화번호 목록 - JavaScript (0) | 2023.08.06 |
[프로그래머스 Level 2] 덧칠하기 - JavaScript (0) | 2023.03.03 |
[프로그래머스 Level 3] 베스트앨범 - JavaScript (0) | 2023.03.01 |
[프로그래머스 Level 2] 소수 찾기 - JavaScript (0) | 2023.02.27 |