Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λŒ€μΆ© λ§Œλ“  자판 λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - λŒ€μΆ© λ§Œλ“  자판

Jieunny 2023. 7. 18. 17:10

πŸ“Œ  문제

νœ΄λŒ€ν°μ˜ μžνŒμ€ 컴퓨터 ν‚€λ³΄λ“œ μžνŒκ³ΌλŠ” λ‹€λ₯΄κ²Œ ν•˜λ‚˜μ˜ 킀에 μ—¬λŸ¬ 개의 λ¬Έμžκ°€ 할당될 수 μžˆμŠ΅λ‹ˆλ‹€. ν‚€ ν•˜λ‚˜μ— μ—¬λŸ¬ λ¬Έμžκ°€ ν• λ‹Ήλœ 경우, λ™μΌν•œ ν‚€λ₯Ό μ—°μ†ν•΄μ„œ λΉ λ₯΄κ²Œ λˆ„λ₯΄λ©΄ ν• λ‹Ήλœ μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ λ°”λ€λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, 1번 킀에 "A", "B", "C" μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ ν• λ‹Ήλ˜μ–΄ μžˆλ‹€λ©΄ 1번 ν‚€λ₯Ό ν•œ 번 λˆ„λ₯΄λ©΄ "A", 두 번 λˆ„λ₯΄λ©΄ "B", μ„Έ 번 λˆ„λ₯΄λ©΄ "C"κ°€ λ˜λŠ” μ‹μž…λ‹ˆλ‹€.
같은 κ·œμΉ™μ„ μ μš©ν•΄ μ•„λ¬΄λ ‡κ²Œλ‚˜ λ§Œλ“  νœ΄λŒ€ν° 자판이 μžˆμŠ΅λ‹ˆλ‹€. 이 νœ΄λŒ€ν° μžνŒμ€ ν‚€μ˜ κ°œμˆ˜κ°€ 1κ°œλΆ€ν„° μ΅œλŒ€ 100κ°œκΉŒμ§€ μžˆμ„ 수 있으며, νŠΉμ • ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ μž…λ ₯λ˜λŠ” λ¬Έμžλ“€λ„ λ¬΄μž‘μœ„λ‘œ λ°°μ—΄λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 또, 같은 λ¬Έμžκ°€ 자판 전체에 μ—¬λŸ¬ 번 ν• λ‹Ήλœ κ²½μš°λ„ 있고, ν‚€ ν•˜λ‚˜μ— 같은 λ¬Έμžκ°€ μ—¬λŸ¬ 번 ν• λ‹Ήλœ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. 심지어 μ•„μ˜ˆ ν• λ‹Ήλ˜μ§€ μ•Šμ€ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λͺ‡λͺ‡ λ¬Έμžμ—΄μ€ μž‘μ„±ν•  수 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
이 νœ΄λŒ€ν° μžνŒμ„ μ΄μš©ν•΄ νŠΉμ • λ¬Έμžμ—΄μ„ μž‘μ„±ν•  λ•Œ, ν‚€λ₯Ό μ΅œμ†Œ λͺ‡ 번 λˆŒλŸ¬μ•Ό κ·Έ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•©λ‹ˆλ‹€.
1번 ν‚€λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν• λ‹Ήλœ λ¬Έμžλ“€μ΄ μˆœμ„œλŒ€λ‘œ λ‹΄κΈ΄ λ¬Έμžμ—΄λ°°μ—΄ keymapκ³Ό μž…λ ₯ν•˜λ €λŠ” λ¬Έμžμ—΄λ“€μ΄ λ‹΄κΈ΄ λ¬Έμžμ—΄ λ°°μ—΄ targetsκ°€ μ£Όμ–΄μ§ˆ λ•Œ, 각 λ¬Έμžμ—΄μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ ν‚€λ₯Ό μ΅œμ†Œ λͺ‡ λ²ˆμ”© λˆŒλŸ¬μ•Ό ν•˜λŠ”μ§€ μˆœμ„œλŒ€λ‘œ 배열에 λ‹΄μ•„ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.
단, λͺ©ν‘œ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 없을 λ•ŒλŠ” -1을 μ €μž₯ν•©λ‹ˆλ‹€.

πŸ’‘  아이디어

제일 κ°€κΉŒμš΄ λ¬Έμžμ—΄μ˜ indexλ₯Ό κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— 각 λ¬Έμžλ³„ μΈλ±μŠ€κ°€ λ‹΄κΈ΄ 객체λ₯Ό 생성해쀀닀.
targets을 λŒλ©΄μ„œ λ¬Έμžμ—΄μ΄ μžˆλ‹€λ©΄ sum에 더해주고, μ—†λ‹€λ©΄ tempλ₯Ό false둜 λ°”κΏ”μ€€λ‹€.
tempλ₯Ό λ”°λ‘œ μ„ μ–Έν•΄μ€€ μ΄μœ λŠ”, ν•˜λ‚˜μ˜ λ¬Έμžμ—΄μ΄λΌλ„ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 닡이 [-1] 이 μ•„λ‹ˆλΌ ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ—΄λ§Œ -1 이기 λ•Œλ¬Έμ— 각 λ¬Έμžμ—΄λ³„λ‘œ λ‚˜λˆ μ„œ 생각해주어야 ν•œλ‹€.

 

✏️  풀이

function solution(keymap, targets) {
  var answer = [];
  let alphabet = {};
  for(let i of keymap) {
    for(let j of i) {
      if(!Object.keys(alphabet).includes(j)) {
        alphabet[j] = i.indexOf(j) + 1;
      }
      else {
        if(alphabet[j] > i.indexOf(j)) {
          alphabet[j] = i.indexOf(j) + 1;
        }
      }
    }
  }

  for(let i of targets) {
    let temp = true;
    let sum = 0;
    for(let j of i) {
      if(Object.keys(alphabet).includes(j)) {
        sum += alphabet[j];
      }
      else {
        temp = false;
        sum -= 1;
        break;
      }
    }
    if(temp) {
      answer.push(sum);
    } else {
      answer.push(-1);
    }
  }
  return answer;
}