나의 풀이
처음에는 targets을 반목문을 돌리면서 각 keymap를 돌아다니며 해당 알파벳에대해 최소로 누를 수 있는 횟수를 구할려고 했으나
시간이 오래걸릴 것 같아서 다른방법을 고민해보았다.
문자열을 작성하고자 할때 A는 최소 n번 B는 최소 m번 등 이런식으로 keymap에서 각 최소 횟수를 파악해서 객체안에 알파벳별로 넣으면 될 것 같았다.
1. keymap을 반복문을 사용해서 알파벳 별로 최소누를 수 있는 횟수를 저장한다.
2. targets에 있는 문자열을 for문을 통해서 해당 알파벳이 keymapBox에 존재하면 count += 를 해주고 해당 알파벳이 없으면 -1을 count에 저장해준다.
function solution(keymap, targets) {
let count = 0; // 해당 알파벳을 작성하기 위해 키를 최소 몇 번 눌러야하는지 횟수
const result = [];
// 1. 최소 keymap 객체 ( 각 알파벳별로 최소로 누를 수 있는 횟수 저장)
const keymapBox = keymap.reduce((acc, cur) => {
[...cur].forEach((alphabet, index) => {
// 해당 알파벳의 최소로 누를 수 있는 횟수 < index + 1
// 최소로 누를 수 있는 횟수가 1부터이니 index + 1
acc[alphabet] = acc[alphabet] < index + 1 ? acc[alphabet] : index + 1;
});
return acc;
}, {});
// 2. targets에 있는 각 알파벳을 keymapBox를 통해 각 target별로 최소 몇 번씩 눌러야 하는지 계산
for (let i = 0; i < targets.length; i++) {
for (let j = 0; j < targets[i].length; j++) {
// count += 해당 알파벳의 횟수
count += keymapBox[targets[i][j]];
}
// 목표 문자열을 작성할 수 없을 때는 -1을 push
result.push(count ? count : -1);
// count 초기화
count = 0;
}
return result;
}
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스] level.3 베스트앨범 (0) | 2023.05.25 |
---|---|
[프로그래머스] level.1 바탕화면 정리 (0) | 2023.05.23 |
[프로그래머스] level.2 다리를 지나는 트럭 (1) | 2023.05.22 |
[프로그래머스 - JS] level.2 프로세스 👍 (0) | 2023.05.20 |
[프로그래머스] level.2 할인행사 (0) | 2023.05.19 |