나의 풀이
from collections import deque
import math
def solution(progresses, speeds):
tmp=[]
for x in progresses:
tmp.append(100-x)
required_days=[math.ceil(x/y) for x,y in zip(tmp, speeds)]
que=deque(required_days)
print(que)
#deque([7, 3, 9, 4, 1, 5])
result = []
#que에 있는 값을 소거하는 방법으로 접근
while que:
count = 0
#최초 first는 7이다.
#두번째 first는 9이다.
first = que[0]
#첫번째 7<=7이다.
#두번째 3<=7
while que and que[0] <= first:
que.popleft()
count += 1
#작은 cycle이 끝난 경우
result.append(count)
return result
문제 보충자료
아래의 테스트 케이스를 이해하면 맞출 수 있음
예제 1)
progresses : [40, 93, 30, 55, 60, 65]
speeds : [60, 1, 30, 5 , 10, 7]
return : [1,2,3]
예제 2)
progresses : [93, 30, 55, 60, 40, 65]
speeds : [1, 30, 5 , 10, 60, 7]
return : [2,4]
다른 사람의 풀이
from collections import deque
import math
def solution(progresses, speeds):
answer = []
days = []
for i in range(len(progresses)):
days.append(math.ceil((100-progresses[i])/speeds[i]))
print(days)
first = days[0]
cnt = 0
# [7, 3, 9, 4, 1, 5]
for day in days:
#1번 for문을 순회하면서 7,3일 때 cnt+=1이 두번 작용하고
#4번 4,1,5 일때 cnt+=1 3번 작용하고, day요소는 끝이났고, else문의 1번과 if문의 cnt 3번이 합쳐져 cnt=4가 된 것을 for문을 완전히 빠져나왔을때 저장해준다.
if day <= first:
cnt+=1
else:
#2번 9일 때 7,3을 2번 카운트 한것이 리스트에 저장된다.
answer.append(cnt)
print(answer)
#3번 9 자신을 cnt하면서 cnt=1로 reset한다.
cnt = 1
first = day
answer.append(cnt)
return answer
progresses = [93, 30, 55, 60, 40, 65]
speeds = [1, 30, 5 , 10, 60, 7]
print(solution(progresses, speeds))
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★ (0) | 2022.12.28 |
---|---|
프린터 → 응급실(큐)+리스트 컴프리핸션 + enumerate()+ any()★★ (0) | 2022.12.28 |
튜플→Counter, 정규식, most_common(), split()★★ (0) | 2022.12.27 |
위장★★→ Counter(), reduce() 모든 요소의 곱 + 모든 요소에 +1 (0) | 2022.12.27 |
괄호 회전하기★★→ rotate() 사용O + rotate() 사용X 문자열 밀기 (0) | 2022.12.27 |