728x90
<문제 링크>
https://programmers.co.kr/learn/courses/30/lessons/42586
<문제 풀이>
- 100이 될 때까지 while문?
- speeds를 100이 될 때까지 더하는 for문?
- progresses가 100이 되면 answer +=1 하고 순서대로 삭제
<코드>
#1차시도 : 1,5 런타임에러, 2 실패
def solution(progresses, speeds):
queue = []
finish = []
for i in range(len(progresses)):
queue.append((100-progresses[i])/speeds[i])
finish.append((100-progresses[i])/speeds[i])
for i in range(1, len(finish)):
if finish[i-1]>finish[i]:
finish[i] = finish[i-1]
answer = [1] * len(set(finish))
i=0
while len(queue)>len(answer):
if queue[i]>queue[i+1]:
answer[i] += 1
queue.pop(i+1)
i-=1
i+=1
return answer
#progresses = [99,99,99,99,99], speeds = [3,3,3,3,3] 테스트케이스
#2차시도 : 2 실패
def solution(progresses, speeds):
queue = []
finish = []
for i in range(len(progresses)):
queue.append((100-progresses[i])/speeds[i])
finish.append((100-progresses[i])/speeds[i])
for i in range(1, len(finish)):
if finish[i-1]>finish[i]:
finish[i] = finish[i-1]
answer = [1] * len(set(finish))
i=0
while len(queue)>len(answer):
if queue[i]>=queue[i+1]:
answer[i] += 1
queue.pop(i+1)
i-=1
i+=1
return answer
#progresses = [5, 5, 5], speeds = [21, 25, 20] 테스트케이스
#3차시도
import math
def solution(progresses, speeds):
queue = []
finish = []
for i in range(len(progresses)):
queue.append(math.ceil((100-progresses[i])/speeds[i]))
finish.append(math.ceil((100-progresses[i])/speeds[i]))
for i in range(1, len(finish)):
if finish[i-1]>finish[i]:
finish[i] = finish[i-1]
answer = [1] * len(set(finish))
i=0
while len(queue)>len(answer):
if queue[i]>=queue[i+1]:
answer[i] += 1
queue.pop(i+1)
i-=1
i+=1
return answer
<고쳐야 할 점>
- zip, 2차원 배열 자유자재로 사용하기
- 올림. math.ceil 기억하기
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[완전탐색] 프로그래머스 L1 '모의고사' (Python) (0) | 2021.11.22 |
---|---|
[큐] 프로그래머스 L2 '다리를 지나는 트럭' (Python) (0) | 2021.11.22 |
[스택] 프로그래머스 L2 '주식가격' (Python) (0) | 2021.11.22 |
[탐욕법] 프로그래머스 L1 '체육복' (Python) (0) | 2021.11.22 |
[탐욕법] 난이도1, 2019 국가 교육기관 코딩 테스트 '큰 수의 법칙' (Python) (0) | 2021.11.22 |