Coding/Code in the Morning

220118_Code in the morning (κΈ°λŠ₯개발)

κΉ€μœ λ‹ˆμ½˜ 2022. 1. 18. 12:35

Code in the morning, 맀일 μ•„μΉ¨ μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό ν’‰λ‹ˆλ‹€. 

πŸ’¬ 문제 μ„€λͺ…: κΈ°λŠ₯개발

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ νŒ€μ—μ„œλŠ” κΈ°λŠ₯ κ°œμ„  μž‘업을 μˆ˜ν–‰ μ€‘μž…λ‹ˆλ‹€. κ° κΈ°λŠ₯은 μ§„도가 100%일 λ•Œ μ„œλΉ„μŠ€μ— λ°˜μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

또, κ° κΈ°λŠ₯의 κ°œλ°œμ†λ„λŠ” λͺ¨λ‘ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ’€μ— μžˆλŠ” κΈ°λŠ₯이 μ•žμ— μžˆλŠ” κΈ°λŠ₯보닀 λ¨Όμ € κ°œλ°œλ  μˆ˜ μžˆκ³ , μ΄λ•Œ λ’€μ— μžˆλŠ” κΈ°λŠ₯은 μ•žμ— μžˆλŠ” κΈ°λŠ₯이 λ°°ν¬λ  λ•Œ ν•¨κ»˜ λ°°ν¬λ©λ‹ˆλ‹€.

λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μž‘μ—…μ˜ 진도가 적힌 μ •μˆ˜ λ°°μ—΄ progresses와 각 μž‘μ—…μ˜ 개발 속도가 적힌 μ •μˆ˜ λ°°μ—΄ speedsκ°€ μ£Όμ–΄μ§ˆ λ•Œ 각 λ°°ν¬λ§ˆλ‹€ λͺ‡ 개의 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

 

πŸ“ μ œν•œ 사항

  • μž‘μ—…μ˜ 개수(progresses, speedsλ°°μ—΄μ˜ 길이)λŠ” 100개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ§„λ„λŠ” 100 미만의 μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ†λ„λŠ” 100 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • λ°°ν¬λŠ” ν•˜λ£¨μ— ν•œ 번만 ν•  수 있으며, ν•˜λ£¨μ˜ 끝에 이루어진닀고 κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ§„λ„μœ¨μ΄ 95%인 μž‘μ—…μ˜ 개발 속도가 ν•˜λ£¨μ— 4%라면 λ°°ν¬λŠ” 2일 뒀에 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

progressesspeedsreturn

[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

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

μž…μΆœλ ₯ 예 #1
첫 번째 κΈ°λŠ₯은 93% μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 1%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 7일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.
두 번째 κΈ°λŠ₯은 30%κ°€ μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 30%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 3일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이전 첫 번째 κΈ°λŠ₯이 아직 μ™„μ„±λœ μƒνƒœκ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 첫 번째 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ” 7일째 λ°°ν¬λ©λ‹ˆλ‹€.
μ„Έ 번째 κΈ°λŠ₯은 55%κ°€ μ™„λ£Œλ˜μ–΄ 있고 ν•˜λ£¨μ— 5%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ 9일간 μž‘μ—… ν›„ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 7일째에 2개의 κΈ°λŠ₯, 9일째에 1개의 κΈ°λŠ₯이 λ°°ν¬λ©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2
λͺ¨λ“  κΈ°λŠ₯이 ν•˜λ£¨μ— 1%μ”© μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ, μž‘μ—…μ΄ λλ‚˜κΈ°κΉŒμ§€ 남은 μΌμˆ˜λŠ” 각각 5일, 10일, 1일, 1일, 20일, 1μΌμž…λ‹ˆλ‹€. μ–΄λ–€ κΈ°λŠ₯이 λ¨Όμ € μ™„μ„±λ˜μ—ˆλ”λΌλ„ μ•žμ— μžˆλŠ” λͺ¨λ“  κΈ°λŠ₯이 μ™„μ„±λ˜μ§€ μ•ŠμœΌλ©΄ 배포가 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 5일째에 1개의 κΈ°λŠ₯, 10일째에 3개의 κΈ°λŠ₯, 20일째에 2개의 κΈ°λŠ₯이 λ°°ν¬λ©λ‹ˆλ‹€.

 

πŸ’‘ λ‚˜μ˜ 풀이 

def solution(progresses, speeds):
    #μž‘μ—…μΌμ΄ μ–Όλ§ˆλ‚˜ κ±Έλ¦¬λŠ”μ§€ κ΅¬ν•˜κΈ°
    days=[]
    for i in range (0, len(progresses)):
        if ((100 - progresses[i]) % speeds[i] == 0 ):
            day = int((100 - progresses[i]) / speeds[i] )
        else:
            day = int((100 - progresses[i]) // speeds[i]) + 1
        days.append(day)
    
    # μˆ«μžκ°€ μ»€μ§€λŠ” μΈλ±μŠ€κ°’
    index =[]
    l = 0
    for i in range (0, len(days)):
        if days[i] >l:
            l = days[i]
            index.append(i)
    
    #인덱슀 λ¦¬μŠ€νŠΈμ—μ„œ 직전 값듀을 λΉΌμ£Όκ³ 
    answer = []
    n = len(index)
    for i in range (0, n):
        if i < n-1:
            a = index[i+1]-index[i]
            answer.append(a)

    #전체 κΈΈμ΄μ—μ„œ λ§ˆμ§€λ§‰ μΈλ±μŠ€κ°’μ„ λΉΌμ€€ 것을 μΆ”κ°€        
    k = len(days)-index[-1]
    answer.append(k)
    return answer

μ—¬λŸ¬ ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•΄μ„œ ν‘Έμ…¨λŠ”λ°.. λ‚˜λŠ” 곧죽어도 forλ¬Έκ³Ό if문으둜  μ•ˆκ°„νž˜μ„ λ‹€μ§œλ‚΄μ„œ ν’€μ–΄λ‚Έ λŠλ‚Œ..

 

πŸ’‘ λ‹€λ₯Έ ν•΄μ„€

 

 

πŸ‘‰πŸ» 문제 λ°”λ‘œκ°€κΈ°