문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
function solution(keymap, targets) {
let answer = [];
for (let i = 0; i < targets.length; i++) {
let target = targets[i].split("");
let minArr = [];
// isImpossible은 찾는 글자가 없는 경우 flag 처리할 변수
let isImpossible = false;
for (let j = 0; j < target.length; j++) {
let countArr = [];
for (let k = 0; k < keymap.length; k++) {
// 찾는 글자의 인덱스 값을 구한다
let textIndex = keymap[k].indexOf(target[j]);
// 찾는 글자가 있을 때(textIndex가 -1이 아님)는 textIndex + 1을 countArr에 푸시한다
if (textIndex > -1) countArr.push(textIndex + 1);
}
// countArr의 길이가 0이면 찾는 글자가 없다는 뜻
// 이때 isImpossible을 true로 바꾸고 반복문에서 빠져나온다
if (countArr.length === 0) {
isImpossible = true;
break;
// countArr의 길이가 0이 아니면 찾는 글자가 있다는 뜻
// countArr에서 가장 작은 숫자(찾는 글자의 인덱스 경우의 수 중 최소)를 minArr에 푸시한다
} else {
minArr.push(Math.min(...countArr));
}
}
// 찾는 글자가 없으면 -1을 answer 배열에 푸시한다
if (isImpossible) {
answer.push(-1);
// 찾는 글자가 있으면 minArr의 합을 answer 배열에 푸시한다
} else {
answer.push(minArr.reduce((a, b) => a + b));
}
}
return answer;
}