https://school.programmers.co.kr/learn/courses/30/lessons/160586
1. 각 알파벳 별로 입력에 필요한 가장 적은 횟수를 찾는다.
1-1. 알파벳의 최소 입력 횟수를 저장하기 위한 short 객체를 선언한다.
1-2. 각 keymap을 순회하며 알파벳 입력에 필요한 횟수를 short 객체에 저장한다.
1-3. 만약 알파벳 입력에 필요한 횟수가 short 객체에 저장된 횟수보다 크다면 무시한다.
2. 최소한의 횟수로 문자열을 입력한다.
2-1. 문자열을 순회하며 short객체에서 입력에 필요한 횟수를 찾아 결과에 더한다.
1번 과정에서 N^2의 속도가 걸리게 되지만, keymap의 갯수가 최대 100개, keymap의 원소의 길이가 최대 100개 이므로 가능하다고 보았다.
최종코드
function solution(keymap, targets) {
var answer = [];
var short = {};
// 1번 작업
for(e of keymap){
for(i = 0; i < e.length; i++){
var c = e[i];
// c가 있으면 비교
if(short[c]){
if(i < short[c]){
short[c] = i + 1;
}
}
// c가 없으면 새로 추가
else{
short[c] = i + 1;
}
}
}
// 2번 작업
for(e of targets){
result = 0;
for(char of e){
if(short[char]){
result += short[char];
}else{
result = -1;
break;
}
}
answer.push(result);
}
return answer;
}
1번 for문 안에서 c=e[i]를 따로 작성한 이유는 short[e[i]] <- 요딴식으로 쓰는게 어지러웠기 때문이다.
'일기' 카테고리의 다른 글
(JavaScript) 둘만의 암호 (0) | 2024.12.12 |
---|---|
OSI 1계층 : 물리 계층 (0) | 2024.12.11 |
OSI 모델 (0) | 2024.12.10 |
(JavaScript) 문자열 나누기 (0) | 2024.12.10 |
(JavaScript) 체육복 (0) | 2024.12.10 |