PS (Problem Solving)/Programmers

[프로그래머스] 대충 만든 자판

캐럿노트 2024. 10. 10. 23:30

문제

https://school.programmers.co.kr/learn/courses/30/lessons/160586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

자바스크립트

function solution(keymap, targets) { 
    // 점수 Key & Value 객체 생성 
    let scoreObj = {};
    for (let i = 0; i < keymap.length; i++) {
        for (let j = 0; j < keymap[i].length; j ++) {
            if (Object.keys(scoreObj).includes(keymap[i][j]) && (scoreObj[keymap[i][j]] > j + 1)) {
                // 눌러야 하는 횟수가 더 작다면 최신화
               scoreObj[keymap[i][j]] = j + 1;
            } else if (Object.keys(scoreObj).includes(keymap[i][j])) {
                // 기존 값이 있고 누르는 횟수가 더 적다면 계속 진행
                continue;
            } else {
                // 아예 값이 없을경우 횟수 기록
                scoreObj[keymap[i][j]] = j + 1;
            }
        }
    }
    
    // 점수 계산
    let answer = new Array(targets.length).fill(0);
    
    for (let i = 0; i < targets.length; i++) {
        for (let j = 0; j < targets[i].length; j ++) {
            if (!Object.keys(scoreObj).includes(targets[i][j])) {
                // 중간에 1개라도 문자열을 완성하지 못한다면 그 단어는 완성하지 못하므로 -1 부여 후 escape
                answer[i] = -1;
                break;
            } else {
                let score = scoreObj[targets[i][j]];
                if (score) {
                    answer[i] += score;
                }
            }
        }
    }
    return answer;
}