4 min read

μ‹€νŒ¨μœ¨ - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅

Table of Contents

2019 KAKAO BLIND RECRUITMENT의 μ‹€νŒ¨μœ¨ 문제 풀이

μ‹€νŒ¨μœ¨

μ‹€νŒ¨μœ¨

문제

문제 열어보기

슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€. κ·Έλ…€κ°€ λ§Œλ“  ν”„λžœμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš©μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀. 원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 μŠ€ν…Œμ΄μ§€ 차이가 λ„ˆλ¬΄ 큰 것이 λ¬Έμ œμ˜€λ‹€.

이 문제λ₯Ό μ–΄λ–»κ²Œ ν• κΉŒ κ³ λ―Ό ν•œ κ·Έλ…€λŠ” λ™μ μœΌλ‘œ κ²Œμž„ μ‹œκ°„μ„ λŠ˜λ €μ„œ λ‚œμ΄λ„λ₯Ό μ‘°μ ˆν•˜κΈ°λ‘œ ν–ˆλ‹€. μ—­μ‹œ 슈퍼 개발자라 λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ€ μ‰½κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ μœ„κΈ°μ— λΉ μ§€κ³  λ§μ•˜λ‹€. 였렐리λ₯Ό μœ„ν•΄ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό μ™„μ„±ν•˜λΌ.

  • μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό 같이 μ •μ˜ν•œλ‹€.
    • μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수 / μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수

전체 μŠ€ν…Œμ΄μ§€μ˜ 개수 N, κ²Œμž„μ„ μ΄μš©ν•˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ λ©ˆμΆ°μžˆλŠ” μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ stagesκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ‹€νŒ¨μœ¨μ΄ 높은 μŠ€ν…Œμ΄μ§€λΆ€ν„° λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κ²¨μžˆλŠ” 배열을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜λΌ.

μ œν•œμ‚¬ν•­

  • μŠ€ν…Œμ΄μ§€μ˜ 개수 N은 1 이상 500 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.
  • stages의 κΈΈμ΄λŠ” 1 이상 200,000 μ΄ν•˜μ΄λ‹€.
  • stagesμ—λŠ” 1 이상 N + 1 μ΄ν•˜μ˜ μžμ—°μˆ˜κ°€ λ‹΄κ²¨μžˆλ‹€.
    • 각 μžμ—°μˆ˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ 도전 쀑인 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
    • 단, N + 1 은 λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€(N 번째 μŠ€ν…Œμ΄μ§€) κΉŒμ§€ 클리어 ν•œ μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λ§Œμ•½ μ‹€νŒ¨μœ¨μ΄ 같은 μŠ€ν…Œμ΄μ§€κ°€ μžˆλ‹€λ©΄ μž‘μ€ 번호의 μŠ€ν…Œμ΄μ§€κ°€ λ¨Όμ € μ˜€λ„λ‘ ν•˜λ©΄ λœλ‹€.
  • μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ μœ μ €κ°€ μ—†λŠ” 경우 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0 으둜 μ •μ˜ν•œλ‹€.

μž…μΆœλ ₯ 예제

Nstagesresult
5[2, 1, 2, 6, 2, 4, 3, 3][3,4,2,1,5]
4[4,4,4,4,4][4,1,2,3]

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

  • μž…μΆœλ ₯ 예 #1
    1번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 8λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이 쀑 1λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€. λ”°λΌμ„œ 1번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    • 1 번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 1/8
      2번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 7λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이 쀑 3λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€. λ”°λΌμ„œ 2번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    • 2 번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 3/7
      λ§ˆμ°¬κ°€μ§€λ‘œ λ‚˜λ¨Έμ§€ μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    • 3번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 2/4

    • 4번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 1/2

    • 5번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ : 0/1
      각 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό μ‹€νŒ¨μœ¨μ˜ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

    • [3,4,2,1,5]

  • μž…μΆœλ ₯ 예 #2
    λͺ¨λ“  μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€μ— μžˆμœΌλ―€λ‘œ 4번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 1이며 λ‚˜λ¨Έμ§€ μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0이닀.

    • [4,1,2,3]

카카였 곡식 ν•΄μ„€ λ³΄λŸ¬κ°€κΈ°


풀이

// javascript

function solution(N, stages) {
  var answer = [];

  // μŠ€ν…Œμ΄μ§€ 반볡
  for (let i = 1; i <= N; i++) {
    // ν˜„μž¬ μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ μ‚¬λžŒ
    let currentStagePlayer = stages.filter((stage) => stage === i).length;
    // ν˜„μž¬ μŠ€ν…Œμ΄μ§€λ₯Ό λ„λ‹¬ν•œ μ‚¬λžŒ
    let overStagePlayer = stages.filter((stage) => stage >= i).length;

    answer.push({
      stage: i, // μŠ€ν…Œμ΄μ§€
      fail: overStagePlayer ? currentStagePlayer / overStagePlayer : 0, // μ‹€νŒ¨μœ¨
    });
  }

  answer = answer
    .sort((a, b) => {
      // μ‹€νŒ¨μœ¨μ΄ κ°™λ‹€λ©΄, μŠ€ν…Œμ΄μ§€ μ˜€λ¦„μ°¨μˆœ μ •λ ¬
      if (a.fail === b.fail) {
        return a.stage - b.stage;
      }
      // μ‹€νŒ¨μœ¨ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
      return b.fail - a.fail;
    })
    .map((item) => item.stage);

  return answer;
}

μž₯ν™©ν•˜μ§€λ§Œ 결둠은

  1. μŠ€ν…Œμ΄μ§€λ³„λ‘œ μ‹€νŒ¨μœ¨μ΄ 높은 μˆœμ„œλ‘œ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
  2. μ‹€νŒ¨μœ¨μ΄ κ°™λ‹€λ©΄ μž‘μ€ μŠ€ν…Œμ΄μ§€λ²ˆν˜Έκ°€ λ¨Όμ € μ˜€λ„λ‘ μ˜€λ¦„μ°¨μˆœ μ •λ ¬

μœ„ 두가지가 핡심이 λ˜κ² λ‹€.

각 μŠ€ν…Œμ΄μ§€ λ³„λ‘œ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ”κ±΄ 곡식이 λ‚˜μ™€μžˆμœΌλ‹ˆ μ–΄λ ΅μ§€ μ•Šκ²Œ ꡬ할 수 μžˆλ‹€. λ‹€λ§Œ λΆ„λͺ¨κ°€ λ˜λŠ” 뢀뢄이 0이 올 수 μžˆμœΌλ―€λ‘œ, κ·Έ λΆ€λΈλ§Œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•΄μ£Όλ©΄ λ˜κ² λ‹€.

μ •λ ¬μ˜ 경우 κΈ°λ³Έμ μœΌλ‘œλŠ” μ‹€νŒ¨μœ¨ λ‚΄λ¦Όμ°¨μˆœ 정렬을 κ°€μ Έκ°€κ³  μ œν•œμ‘°κ±΄μΈ μ‹€νŒ¨μœ¨μ΄ 같을 λ•Œ μŠ€ν…Œμ΄μ§€ μ˜€λ¦„μ°¨μˆœ 정렬을 μ˜ˆμ™Έλ‘œ 적어주면 λ˜κ² λ‹€.

ν’€μ΄μ½”λ“œλ§Œ 보면 κ·Έλ ‡κ²Œ μ–΄λ ΅μ§€ μ•ŠμœΌλ‚˜, 문제λ₯Ό μ΄ν•΄ν•˜κ³  핡심을 μ°Ύμ•„λ‚΄λŠ” ν›ˆλ ¨μ΄ μ§€μ†μ μœΌλ‘œ ν•„μš”ν•  것 κ°™λ‹€. κΎΈμ€€νžˆ κΎΈμ€€νžˆ ν’€μž.