function solution(keyMap, targets) {
var answer = [];
// targets 의 길이만큼 반목문을 실행하여 targets내의 요소들을 확인하고자 한다.
for(let i=0; i<targets.length; i++) {
let total = 0;
// targets 요소의 길이만큼 반복문을 실행하여 요소의 각 문자를 확인하고자 한다.
for(let k=0; k<targets[i].length; k++) {
// count 변수는 키를 몇 번 눌렀을 때 각 문자를 작성할 수 있는지 최소의 숫자를 구하기 위한 변수이다.
let count = 101;
const word = targets[i][k]
// keyMap의 길이만큼 반복문을 실행하여 targets 요소의 각 문자를 keyMap의 요소가 포함하고 있는지 확인하고자 한다.
for(j=0; j<keyMap.length; j++) {
let index = keyMap[j].indexOf(word);
// targets 요소의 각 문자를 keyMap의 요소가 포함하고 있는 경우에 대한 처리
if(index != -1) {
// count가 -1이 아니면서 해당 최소 숫자가 이전의 최소값인 count 보다 작은 경우 이거나
// count가 -1 인 경우는 count값을 해당 최소값으로 대체한다.
if((count != -1 && index+1 < count) || count == -1) count = index+1;
}
// targets 요소의 각 문자를 keyMap의 요소가 포함하고 있지 않으면서
// count > 100 ( count가 -1 이 아니고, 최소의 숫자가 구해지지 않은 상태 )인 경우에 대한 처리
if(index == -1 && count > 100) count = -1;
}
// targets 요소의 각 문자를 keyMap의 요소를 순회하며 확인했을 때 문자를 포함하고 있지 않은 것이 확인된 경우, -1을 answer에 push하고
// 이미 해당 문자를 작성 할 수 없으므로, 반복문을 break 하여 다음 targets의 요소를 확인하도록 한다.
if(count == -1){
answer.push(-1);
break;
}
// targets 요소의 각 문자를 keyMap의 요소를 순회하며 확인했을 때 문자를 포함하고있다는 것이 확인된 경우 total에 count를 더해준다.
else total+=count;
}
// targets의 요소가 각 문자중 하나라도 없어서 작성할 수 없게 된 경우가 아니라면, answer[i] 에 값이 없을 것 이므로, total 값을 answer[i] 에 할당한다.
if(!answer[i]) answer[i] = total;
}
return answer;
}
문제출처
프로그래머스 > 코딩테스트연습