๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

by syLim___ 2023. 6. 4.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42586#

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


๋‚˜๋Š” ์™„์ „ ์ •์งํ•˜๊ณ  ๋น„ํšจ์œจ์ ์œผ๋กœ ํ’€์—ˆ๋‹ค.

์ธํ’‹ ๋ฒ”์œ„๊ฐ€ 100 ์ดํ•˜๋กœ ๋งค์šฐ ์ž‘์•„์„œ ๋ณ„ ์‹ ๊ฒฝ ์•ˆ ์“ฐ๊ธฐ๋„ ํ–ˆ๊ณ , ๊ทธ๋ƒฅ ํ•ด๋„ ํ’€์–ด์ง€๊ธด ํ•˜๊ธธ๋ž˜ ๊นŠ์ด ์ƒ๊ฐ์„ ์•ˆ ํ•ด๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์–ผ๋ฅธ ํ’€๊ณ  ์ œ์ถœํ•˜๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์—ฌ๋Ÿฌ ํ’€์ด๋ฅผ ์ฝ์–ด๋ณด์•˜๋‹ค.

 

์ผ๋‹จ ๋‚˜์ฒ˜๋Ÿผ 1. ๋ฐฐํฌ ์ผ์ž๋ฅผ ๊ณ„์‚ฐ 2. ๋ฐฐํฌ์‹œํ‚ค๊ธฐ ์ด๋ ‡๊ฒŒ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆˆ ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์—ˆ๊ณ ,

๋ฐฐํฌ ์ผ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด ๋ฐ”๋กœ ๋ฐฐํฌํ•ด์ฃผ๋Š” ํ’€์ด๊ฐ€ ์••๋„์ ์œผ๋กœ ๋งŽ์•˜๋‹ค.

 

๋ฌธ์ œ ์œ ํ˜•์— ์Šคํƒ/ํ๋ผ๊ณ  ๋Œ€๋†“๊ณ  ์ ํ˜€์žˆ๋Š”๋ฐ๋„ ๋ฌด์‹ํ•˜๊ฒŒ ๊ทธ๋ƒฅ ํ’€์—ˆ์œผ๋‹ˆ ๋‹น์—ฐํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ํ—ฟ

์•ฝ๊ฐ„์˜ ๋ฐ˜์„ฑ์„ ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค


์ฒ˜์Œ ์ œ์ถœํ•œ ์ฝ”๋“œ

def solution(progresses, speeds):
    n = len(progresses)
    answer = []
    complete = [0]*n # progress๋ณ„ ๋ฐฐํฌ์ผ ๊ธฐ๋ก
    check = 0 # ๋ฐฐํฌ ์™„๋ฃŒ๋œ progress ๊ฐœ์ˆ˜
    days = 1 # ๊ฒฝ๊ณผ ์ผ์ˆ˜
    while check < n: # ๋ชจ๋‘ ๋ฐฐํฌ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        for i in range(n):
            if progresses[i] >= 100:
                continue
            progresses[i] += speeds[i]
            if progresses[i] >= 100:
                complete[i] = days
                check += 1
        days += 1
    
    # ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฐํฌ
    prev = complete[0]
    idx = 1
    cnt = 1
    while idx < n:
        if complete[idx] <= prev:
            cnt += 1
        else:
            answer.append(cnt)
            cnt = 1
            prev = complete[idx]
        idx += 1
    if cnt > 0:
        answer.append(cnt)
        
    return answer

๋‹ค๋ฅธ ๋ถ„ ํ’€์ด ์ฐธ๊ณ ํ•˜์—ฌ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ

from collections import deque

def solution(progresses, speeds):
    
    progresses = deque(progresses)
    speeds = deque(speeds)
    
    answer = []
    days = 0
    cnt = 0
    while progresses:
        if progresses[0] + days*speeds[0] >= 100:
            progresses.popleft()
            speeds.popleft()
            cnt += 1
        else:
            if cnt > 0:
                answer.append(cnt)
                cnt = 0
            days += 1
    answer.append(cnt)
        
    return answer
728x90