프로그래머스/Lv1

[프로그래머스/Javascript] Lv.1 대충 만든 자판

woo.oing 2026. 1. 21. 17:50

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

✓ 풀이과정

 

1. 전달되는 keymap을 알파벳 하나씩 순회하며 Map에 (alphabet, index) 형태로 저장하는데 중복되는 알파벳이면 더 적은 index로 다시 저장해서 알파벳별로 최소 index를 저장

2. targets를 돌면서 1에서 저장해둔 알파벳의 index를 찾아서 합산하여 저장하는데 이 값이 0이라면 -1을 저장

 

 

 최종코드

function solution(keymap, targets) {
  let answer = [];
  let keys = new Map();

  for (const key of keymap) {
    for (let j = 0; j < key.length; j++) {
      let char = key[j];
      if (!keys.has(char) || keys.get(char) > j) {
        keys.set(char, j);
      }
    }
  }

  for (const target of targets) {
    let cnt = 0;
    for (const char of target) {
      if (!keys.has(char)) {
        cnt = -1;
        break;
      }
      cnt += keys.get(char) + 1;
    }
    answer.push(cnt);
  }

  return answer;
}

 

중복되는 알파벳은 [최소 index = 키를 최소로 누를 수 있는 횟수]로 저장해서 Map으로 가지고 한 target 당 누르는 횟수만 저장해서 배열로 반환하면 되는 문제였는데 이전 문제들을 해결하면서 Map을 사용해봤던 경험 덕분에 생각보다 수월하게 해결할 수 있었던 것 같습니다!