πŸ’»μ½”λ”©ν…ŒμŠ€νŠΈ λ¬Έμ œν’€μ΄16

μ§€λ―Όμ„œΒ·2023λ…„ 3μ›” 14일
0

coding test

λͺ©λ‘ 보기
15/30

Chapter11. 자주 λ“±μž₯ν•˜λŠ” 자료 ꡬ쑰

[문제44] κΈ°λŠ₯ 개발 - Level2

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

또, 각 κΈ°λŠ₯의 개발 μ†λ„λŠ” λͺ¨λ‘ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 뒀에 μžˆλŠ” κΈ°λŠ₯이 μ•žμ— μžˆλŠ” κΈ°λŠ₯보닀 λ¨Όμ € 개발될 수 있고, 이 λ•Œ λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μž‘μ—…μ˜ 진도가 적힌 μ •μˆ˜ λ°°μ—΄ progresses와 각 μž‘μ—…μ˜ 개발 속도가 적힌 μ •μˆ˜ λ°°μ—΄ sppedsκ°€ μ£Όμ–΄μ§ˆ λ•Œ 각 λ°°ν¬λ§ˆλ‹€ λͺ‡ 개의 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό returnν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

[μ œν•œμ‚¬ν•­]

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

[μ½”λ“œμž‘μ„±]

1. μž‘μ—… 큐가 λ‚¨μ•˜μ„ λ•Œ ν•˜λ£¨ λ™μ•ˆ μ§„ν–‰ν•˜λ©΄μ„œ μž‘μ—… 진척도 λ†’μž„

def solution(progresses, speeds):
	answer = []
    
    while progresses:
    	for i in range(len(progresses)):
        	progresses[i] += speeds[i]

2. μ™„λ£Œλœ μž‘μ—… 확인

cnt = 0
while progresses and progresses[0] >= 100:
	progresses.pop(0)
    speeds.pop(0)
    cnt += 1

if cnt > 0: answer.append(cnt)

[μ „μ²΄μ½”λ“œ]

def solution(progresses, speeds):
	answer = []
    
    while progresses:
    	for i in range(len(progresses)):
        	progresses[i] += speeds[i]
            
        cnt = 0
        while progresses and progresses[0] >= 100:
            progresses.pop(0)
            speeds.pop(0)
            cnt += 1

        if cnt > 0: answer.append(cnt)
        
    return answer

[μ½”λ“œμž‘μ„±2]

1. μž‘μ—… 진도와 μž‘μ—… 속도λ₯Ό zip() ν•¨μˆ˜λ‘œ λ¬Άμ–΄ ν•˜λ‚˜μ˜ 연속적인 λ°μ΄ν„°λ‘œ λ§Œλ“¦.

def solution(progresses, speeds):
	answer = []
    
    for progresses, speed in zip(progresses, speeds):

2. 남은 일수 계산 ν›„, μ •λ‹΅ 배열에 μΆ”κ°€

for progresses, speed in zip(progresses, speeds):
	left = -((progress -100) // speed)
  	if not answer or answer[-1][0] < left:
    	answer.append([left, 1])
    else: answer[-1][1] += 1

3. κ²°κ³Ό λ°˜ν™˜

return [a[1] for a in answer]

[μ „μ²΄μ½”λ“œ]

def solution(progresses, speeds):
	answer = []
    
    for progresses, speed in zip(progresses, speeds):
    	left = -((progress -100) // speed)
  		if not answer or answer[-1][0] < left:
    		answer.append([left, 1])
    	else: answer[-1][1] += 1
        
    return [a[1] for a in answer]
profile
πŸ’» + πŸŽ₯

0개의 λŒ“κΈ€