본문 바로가기
자바스크립트 코딩테스트

프로그래머스 Level 1 - 대충 만든 자판 (Javascript)

by 준벨롭 2023. 11. 18.

문제

답안

function solution(keymap, targets) {
    const answer = [];
    
    // 키의 최솟값을 담을 객체 선언
    const mapKey = new Map();
    
    // keymap에 있는 값인 keys 값 생성"ABACD", "BCEFD"
    for(keys of keymap){
        
        for(let i = 0; i < keys.length; i++){
            (mapKey.has(keys[i])) ?
            
                // 선언한 객체에 값이 있다면, map.set을 이용해 값이 작은 값을 넣어준다.(값 비교는 map.get으로)
                mapKey.set(keys[i], Math.min(mapKey.get(keys[i]), i+1)) : 
                
                // 값이 없다면 keys[i]값과 i+1 값을 객체에 넣어준다.
                mapKey.set(keys[i], i+1);
        }
    }
    
    //targets 안에 있는 tar 값 생성"ABCD", "AABB"
    for(tar of targets){
        let keyNum = 0;
        for(let i = 0; i < tar.length; i++){
        
            // tar[i]값이 mapKey에 있다면
            if(mapKey.has(tar[i])){
            
                // mapKey에 있는 tar[i] 값을 keyNum에 넣어준다.
                keyNum += mapKey.get(tar[i]);
            } else {
            
                // 없다면 keyNum 에 -1 을 넣어준다.
                keyNum = -1;
                break;
            }
        }
        answer.push(keyNum);
    }
    
    
    
    return answer;
}

후기

객체를 새로 만들고, 그 값을 이용한 풀이는 나에게 너무 어색해서 여러시간 고민 후에 답지를 찾아본 문제이다.

새로운 객체를 만들고 has, get, set과 같은 방법을 이용해 푸는 방법이 낯설었다.

728x90