일기

(JavaScript) 대충 만든 자판

Realuda72 2024. 12. 11. 10:27

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