[프로그래머스] 대충 만든 자판 / JavaScript / Level 2

KimYoungWoong·2023년 2월 28일
0

Programmers

목록 보기
53/60
post-thumbnail

🚩문제 주소


📄 풀이

Map

  1. 정답을 넣을 변수 answer에 빈 배열을 할당합니다.
    new Map으로 새로운 맵 keyMap을 만듭니다.
  1. keyMap에 자판의 알파벳의 최소 인덱스를 저장합니다.

  2. targets를 순회합니다.

    • cnt를 선언 후 0을 할당합니다.
    • targets에 있는 문자열에서 각 알파벳을 keyMap에서 찾습니다.
    • 찾았다면 cnt에 찾은 value를 더해줍니다.
    • 찾지 못했다면 cnt를 -1로 변경하고 반복을 종료합니다.
    • 반복이 끝났다면 answer에 cnt를 넣어줍니다.
  3. 정답을 리턴합니다.



👨‍💻 코드

function solution(keymap, targets) {
  const answer = [];
  // 새로운 Map 선언 후 할당
  // - 자판의 최소 인덱스를 +1하여 저장
  const keyMap = new Map();
  keymap.forEach((map) => {
    for (let i = 0; i < map.length; i++) {
      if (keyMap.has(map[i])) {
        const idx = Math.min(i + 1, keyMap.get(map[i]));
        keyMap.set(map[i], idx);
      } else {
        keyMap.set(map[i], i + 1);
      }
    }
  });
  // targets를 순회
  // - value를 더할 cnt 변수를 선언하고 0을 할당한다.
  // - 각 알파벳을 만들어 둔 Map에서 찾는다.
  // - value가 존재하면 cnt에 더한다.
  // - 존재하지 않으면 cnt를 -1로 바꾸고 반복을 종료한다.
  // - cnt를 answer에 넣는다.
  targets.forEach((target) => {
    let cnt = 0;
    for (let i = 0; i < target.length; i++) {
      const temp = keyMap.get(target[i]);
      if (temp) cnt += temp;
      else {
        cnt = -1;
        break;
      }
    }
    answer.push(cnt);
  });

  return answer;
}

profile
블로그 이전했습니다!! https://highero.tistory.com

0개의 댓글