문제
https://school.programmers.co.kr/learn/courses/30/lessons/160586
function solution(keymap, targets) {
let answer = [];
const map = new Map();
//map을 사용하여 ketmap을 돌아 배열에 각 문자열을 비교해서 최소값만 넣어준다.
//ex) keymap =>["ABACD", "BCEFD"]
//ex) map => Map(6) { 'A' => 1, 'B' => 1, 'C' => 2, 'D' => 5, 'E' => 3, 'F' => 4 }
for(let i = 0; i< keymap.length; i++){
for(let j = 0; j<keymap[i].length; j++){
if(!map.has(keymap[i][j])){
map.set(keymap[i][j],j+1)
} else{
if(map.get(keymap[i][j]) > j+1){
map.set(keymap[i][j],j+1)
}
}
}
}
// targets의 각각 원소들을 돌면서 저장한 map에 값들을 더해준다, 여기서 map에 값이 undefined라면 targets 문자열이 어디에도 존재하지 않기 때문에 -1을 배열에 넣어주고 종료시킨다.
targets.forEach((target) => {
let padNumber = 0;
for(let i in target) {
if(map.get(target[i]) == undefined) {
padNumber = -1;
break;
}
else padNumber+= map.get(target[i])
}
answer.push(padNumber);
})
return answer;
}
느낀점
처음에 문제를 잘못읽어서 꽤나 헤맸다...ㅎ
객체나 Map객체를 사용하면 어렵지 않게 풀 수 있다.