Link
문제
풀이
(1)
function solution(keymap, targets) {
let answer = new Array(targets.length).fill(0);
let alphabet = ['A', 'B', 'C', 'D', 'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
let map = {};
for (let i = 0; i < alphabet.length; i++) {
const char = alphabet[i];
let min = 101;
for (let j = 0; j < keymap.length; j++) {
let idx = keymap[j].indexOf(char);
if (idx >= 0 && min > idx) min = idx;
}
map[char] = min;
}
for (let i = 0; i < targets.length; i++) {
let target = targets[i];
for (let c of target) {
let idx = map[c];
if (idx === 101) {
answer[i] = -1;
break;
}
answer[i] += idx + 1;
}
}
return answer;
}
(2)
function solution(keymap, targets) {
// 각 target 문자열에 대한 답안을 저장할 배열 (targets 길이에 맞춰 초기화)
let answer = new Array(targets.length).fill(0);
// 알파벳 배열 생성 (A ~ Z)
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
let map = {};
// 각 알파벳에 대해 keymap에서 최소 누름 횟수를 구함
for (let char of alphabet) {
let minPress = 101; // 문제 제한: 최대 100회 누름
for (let key of keymap) {
let idx = key.indexOf(char);
if (idx >= 0 && idx < minPress) {
minPress = idx;
}
}
map[char] = minPress; // 만약 해당 문자가 없는 경우, minPress는 그대로 101임
}
// 각 target 문자열 처리
for (let i = 0; i < targets.length; i++) {
let target = targets[i];
let totalPresses = 0;
for (let c of target) {
let presses = map[c];
// keymap에서 해당 문자를 찾지 못한 경우 (presses가 101인 경우)
if (presses === 101) {
totalPresses = -1;
break;
}
totalPresses += presses + 1; // 실제 누름 횟수는 인덱스+1
}
answer[i] = totalPresses;
}
return answer;
}
(3)
function solution(keymap, targets) {
// 각 문자별 최소 누름 횟수를 저장할 객체 생성
const minPress = {};
// keymap에 있는 각 키에 대해 반복
keymap.forEach(key => {
// 각 키 문자열의 각 문자와 누름 횟수(인덱스+1)를 확인합니다.
for (let i = 0; i < key.length; i++) {
const ch = key[i];
// 이미 등록된 경우 더 작은 값으로 갱신
if (minPress[ch] === undefined || minPress[ch] > i + 1) {
minPress[ch] = i + 1;
}
}
});
// targets의 각 문자열에 대해 최소 누름 횟수 계산
const answer = targets.map(target => {
let total = 0;
for (let i = 0; i < target.length; i++) {
const ch = target[i];
// 해당 문자가 keymap에 없으면 -1 반환
if (minPress[ch] === undefined) return -1;
total += minPress[ch];
}
return total;
});
return answer;
}
'알고리즘 > 문제' 카테고리의 다른 글
[프로그래머스 | Lv. 1 | JavaScript] 체육복 (0) | 2025.02.25 |
---|---|
[프로그래머스 | Lv. 1 | JavaScript] 완주하지 못한 선수 (1) | 2025.02.24 |
[프로그래머스 | Lv. 1 | JavaScript] 둘만의 암호 (0) | 2025.02.21 |
[프로그래머스 | Lv. 1 | JavaScript] 문자열 나누기 (0) | 2025.02.18 |
[프로그래머스 | Lv. 1 | JavaScript] 로또의 최고 순위와 최저 순위 (0) | 2025.02.17 |
※ 쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.