function solution(keymap, targets) {
let answer = [];
for (let i = 0; i < targets.length; i++) {
let splitTarget = targets[i].split("");
let sum = 0;
for (let j = 0; j < splitTarget.length; j++) {
let minIndex = Number.MAX_SAFE_INTEGER;
for (let k = 0; k < keymap.length; k++) {
let index = keymap[k].indexOf(splitTarget[j]) + 1;
if (index === 0) {
continue;
} else if (minIndex > index) {
minIndex = index;
}
}
if (minIndex === Number.MAX_SAFE_INTEGER) {
sum = -1;
} else {
sum += minIndex;
}
}
answer.push(sum);
}
return answer;
}
targets 의 문자열들을 다 쪼개서 반복문을 돌면서, 인덱스를 비교해주어서 그 최솟값을 합한 값을 answer에 넣어주었는데, 테케 절반 정도가 틀리게 나왔다.
이유를 보아하니
const keymap = ["ABACD", "BCEFD"];
const targets = ["ZABCD", "AABB"];
이러한 케이스가 주어졌을때 값이 [-1, 4]가 나와야하는데, -1일때 바로 리턴을 해주는것이 아닌 저 값도 더해주어서 다른 값이 나왔다.
function solution(keymap, targets) {
let answer = [];
for (let i = 0; i < targets.length; i++) {
let splitTarget = targets[i].split("");
let sum = 0;
for (let j = 0; j < splitTarget.length; j++) {
let minIndex = Number.MAX_SAFE_INTEGER;
for (let k = 0; k < keymap.length; k++) {
let index = keymap[k].indexOf(splitTarget[j]) + 1;
if (index === 0) {
continue;
} else if (minIndex > index) {
minIndex = index;
}
}
if (minIndex === Number.MAX_SAFE_INTEGER) {
sum = -1;
break;
} else {
sum += minIndex;
}
}
answer.push(sum);
}
return answer;
}
더한 값이 -1일때 바로 break을 해주어서 해당 문자열의 반복문을 끝내도록 했다.