3 min read

[Level 2] ν”„λ¦°ν„° - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅

Table of Contents

ν”„λ¦°ν„° 문제 풀이

문제

문제 열어보기

일반적인 ν”„λ¦°ν„°λŠ” 인쇄 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μΈμ‡„ν•©λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ€‘μš”ν•œ λ¬Έμ„œκ°€ λ‚˜μ€‘μ— 인쇄될 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œλ₯Ό λ¨Όμ € μΈμ‡„ν•˜λŠ” ν”„λ¦°ν„°λ₯Ό κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. 이 μƒˆλ‘­κ²Œ κ°œλ°œν•œ ν”„λ¦°ν„°λŠ” μ•„λž˜μ™€ 같은 λ°©μ‹μœΌλ‘œ 인쇄 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  1. 인쇄 λŒ€κΈ°λͺ©λ‘μ˜ κ°€μž₯ μ•žμ— μžˆλŠ” λ¬Έμ„œ(J)λ₯Ό λŒ€κΈ°λͺ©λ‘μ—μ„œ κΊΌλƒ…λ‹ˆλ‹€.
  2. λ‚˜λ¨Έμ§€ 인쇄 λŒ€κΈ°λͺ©λ‘μ—μ„œ J보닀 μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œκ°€ ν•œ κ°œλΌλ„ μ‘΄μž¬ν•˜λ©΄ Jλ₯Ό λŒ€κΈ°λͺ©λ‘μ˜ κ°€μž₯ λ§ˆμ§€λ§‰μ— λ„£μŠ΅λ‹ˆλ‹€.
  3. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ Jλ₯Ό μΈμ‡„ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 4개의 λ¬Έμ„œ(A, B, C, D)κ°€ μˆœμ„œλŒ€λ‘œ 인쇄 λŒ€κΈ°λͺ©λ‘μ— 있고 μ€‘μš”λ„κ°€ 2 1 3 2 라면 C D A B 순으둜 μΈμ‡„ν•˜κ²Œ λ©λ‹ˆλ‹€.

λ‚΄κ°€ 인쇄λ₯Ό μš”μ²­ν•œ λ¬Έμ„œκ°€ λͺ‡ 번째둜 μΈμ‡„λ˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ—μ„œ CλŠ” 1번째둜, AλŠ” 3번째둜 μΈμ‡„λ©λ‹ˆλ‹€.

ν˜„μž¬ λŒ€κΈ°λͺ©λ‘μ— μžˆλŠ” λ¬Έμ„œμ˜ μ€‘μš”λ„κ°€ μˆœμ„œλŒ€λ‘œ λ‹΄κΈ΄ λ°°μ—΄ priorities와 λ‚΄κ°€ 인쇄λ₯Ό μš”μ²­ν•œ λ¬Έμ„œκ°€ ν˜„μž¬ λŒ€κΈ°λͺ©λ‘μ˜ μ–΄λ–€ μœ„μΉ˜μ— μžˆλŠ”μ§€λ₯Ό μ•Œλ €μ£ΌλŠ” location이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λ‚΄κ°€ 인쇄λ₯Ό μš”μ²­ν•œ λ¬Έμ„œκ°€ λͺ‡ 번째둜 μΈμ‡„λ˜λŠ”μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • ν˜„μž¬ λŒ€κΈ°λͺ©λ‘μ—λŠ” 1개 이상 100개 μ΄ν•˜μ˜ λ¬Έμ„œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
  • 인쇄 μž‘μ—…μ˜ μ€‘μš”λ„λŠ” 1~9둜 ν‘œν˜„ν•˜λ©° μˆ«μžκ°€ 클수둝 μ€‘μš”ν•˜λ‹€λŠ” λœ»μž…λ‹ˆλ‹€.
  • location은 0 이상 (ν˜„μž¬ λŒ€κΈ°λͺ©λ‘μ— μžˆλŠ” μž‘μ—… 수 - 1) μ΄ν•˜μ˜ 값을 κ°€μ§€λ©° λŒ€κΈ°λͺ©λ‘μ˜ κ°€μž₯ μ•žμ— 있으면 0, 두 λ²ˆμ§Έμ— 있으면 1둜 ν‘œν˜„ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

prioritieslocationreturn
[2, 1, 3, 2]21
[1, 1, 9, 1, 1, 1]05

μž…μΆœλ ₯ 예 μ„€λͺ…

  • 예제 #1
    λ¬Έμ œμ— λ‚˜μ˜¨ μ˜ˆμ™€ κ°™μŠ΅λ‹ˆλ‹€.
  • 예제 #2
    6개의 λ¬Έμ„œ(A, B, C, D, E, F)κ°€ 인쇄 λŒ€κΈ°λͺ©λ‘μ— 있고 μ€‘μš”λ„κ°€ 1 1 9 1 1 1 μ΄λ―€λ‘œ C D E F A B 순으둜 μΈμ‡„ν•©λ‹ˆλ‹€.

풀이

function solution(priorities, location) {
  var answer = 0;

  var arr = priorities.map((item, index) => ({
    target: index === location, // 인쇄 μš”μ²­ν•œ λ¬Έμ„œ
    value: item, // μ€‘μš”λ„
  }));

  while (true) {
    // ν˜„μž¬ 인쇄할 차둀인 λ¬Έμ„œλ₯Ό λŒ€κΈ°λͺ©λ‘μ—μ„œ 제거
    const front = arr.shift();

    // λŒ€κΈ°λͺ©λ‘μ€‘에 ν˜„μž¬ 인쇄할 λ¬Έμ„œλ³΄λ‹€ μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œκ°€ μžˆλ‹€λ©΄
    if (arr.some((item) => item.value > front.value)) {
      // ν˜„μž¬ λ¬Έμ„œλ₯Ό 제일 λ’€λ‘œ 보냄
      arr.push(front);
      continue;
    }

    // 횟수 증가
    answer++;

    // ν˜„μž¬ 인쇄할 λ¬Έμ„œκ°€ λ‚΄κ°€ μš”μ²­ν•œ λ¬Έμ„œκ°€ λ§žλ‹€λ©΄
    if (front.target) {
      return answer;
    }
    // else
    // μš”μ²­ν•˜μ§€ μ•Šμ€ λ¬Έμ„œλŠ” μ€‘μš”λ„μ— 따라 횟수 증가 ν›„ κ·Έλƒ₯ λ„˜κΉ€
  }
}

문제 주제인 μŠ€νƒ/큐에 맞게 ν•΄λ‹Ή λ¬Έμ œλŠ” 큐λ₯Ό μ΄μš©ν•œ 문제라고 ν•  수 μžˆλ‹€. λŒ€κΈ°μ—΄μ˜ κ°€μž₯ μ•žμ˜ μš”μ†Œλ₯Ό μ΄μš©ν•΄ 쑰건에 λ§žλŠ”μ§€ κ²€μ‚¬ν•˜λ©΄ λœλ‹€.