🌞Algorithm/πŸ”₯programmers

[programmers] μ‹€νŒ¨μœ¨ - 2019 KAKAO BLIND RECRUITMENT

λΏŒμ•Ό._. 2021. 1. 3. 22:27

μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 2019 KAKAO BLIND RECRUITMENT


<μ‹€νŒ¨μœ¨>

 

문제 μ„€λͺ…

 

슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€. κ·Έλ…€κ°€ λ§Œλ“  ν”„λ Œμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš©μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀. 원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 μŠ€ν…Œμ΄μ§€ 차이가 λ„ˆλ¬΄ 큰 것이 λ¬Έμ œμ˜€λ‹€.
이 문제λ₯Ό μ–΄λ–»κ²Œ ν• κΉŒ κ³ λ―Ό ν•œ κ·Έλ…€λŠ” λ™μ μœΌλ‘œ κ²Œμž„ μ‹œκ°„μ„ λŠ˜λ €μ„œ λ‚œμ΄λ„λ₯Ό μ‘°μ ˆν•˜κΈ°λ‘œ ν–ˆλ‹€. μ—­μ‹œ 슈퍼 개발자라 λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ€ μ‰½κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ μœ„κΈ°μ— λΉ μ§€κ³  λ§μ•˜λ‹€. 였렐리λ₯Ό μœ„ν•΄ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό μ™„μ„±ν•˜λΌ.
  • μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό 같이 μ •μ˜ν•œλ‹€.
    • μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수 / μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수

 

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

 

 

μ œν•œ 사항

 

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

 

 

문제 풀이

    - my solution

def solution(N, stages):
    answer = []
    
    temp=[0]*N

    count=len(stages) #1λ‹¨κ³„λŠ” μ „λΆ€ μ‹œλ„μ€‘μ΄λ―€λ‘œ μ²˜μŒμ€ 전체 인원
    j=0
    for i in temp:
        x=stages.count(j+1)
        if(x==0 or count==0): #0으둜 λ‚˜λˆ„κΈ° λ°©μ§€
            temp[j]=0
        else:
            temp[j]=x/count
        j+=1
        count-=x #μ•žλ‹¨κ³„ ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ μ‚¬λžŒ λΉΌκΈ°
        
    while(temp.count(-1)!=len(temp)): #λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€ μ •λ ¬
        answer.append(temp.index(max(temp))+1)
        temp[temp.index(max(temp))]=-1
        
    return answer

  N: μŠ€ν…Œμ΄μ§€ 개수

  stages: μ‚¬μš©μžλ“€μ΄ ν˜„μž¬ 도전 쀑인 μŠ€ν…Œμ΄μ§€μ˜ 번호 

  temp: μ‹€νŒ¨μœ¨μ„ λ‚˜νƒ€λ‚΄λŠ” 리슀트

  answer: μ‹€νŒ¨μœ¨μ΄ 높은 μŠ€ν…Œμ΄μ§€λΆ€ν„° λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κ²¨μžˆλŠ” λ°°μ—΄

 

  1) 1λ‹¨κ³„λŠ” μ „λΆ€ μ‹œλ„ν•œ κ²ƒμ΄λ―€λ‘œ 전체 μΈμ›μœΌλ‘œ setting

  2) μ‹€νŒ¨μœ¨μ„ κ³„μ‚°ν•˜κΈ° μœ„ν•΄ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수λ₯Ό μ„Έμ–΄ x에 μ €μž₯

      2-1) 도전 쀑인 μ‚¬μš©μžλ“€μ˜ 수 or 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ μˆ˜κ°€ 0이면 μ‹€νŒ¨μœ¨ 0으둜 μ €μž₯

      2-2) 0이 μ•„λ‹Œ 경우 도전 쀑인 (ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수)/(μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수) 계산

      2-3) λ‹€μŒ μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄μˆ˜λŠ” μ „ 단계λ₯Ό ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ μ‚¬λžŒμ„ λΉΌμ€€λ‹€

  3) 리슀트의 값이 μ „λΆ€ λ‹€ -1이 아닐 경우 계속 반볡

     3-1) μ΅œλŒ“κ°’μ˜ 인덱슀λ₯Ό answer에 μ €μž₯

     3-2) κ·Έ 인덱슀의 값을 -1둜 μ €μž₯


μ²˜μŒμ— λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν•˜μ˜€μ§€λ§Œ 0으둜 λ‚˜λˆ„κΈ°λ₯Ό λ°©μ§€ν•˜λŠ” if문을 μΆ”κ°€ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€λ‹€.

μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜λŠ” 것은 μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수λ₯Ό κ΅¬ν•˜λŠ” 방법을 λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€λ‹€.

 

좜처: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”© ν…ŒμŠ€νŠΈ μ—°μŠ΅, https://programmers.co.kr/learn/challenges