문제
https://programmers.co.kr/learn/courses/30/lessons/42586
풀이
def solution(progresses, speeds):
import math
answer = []
Q = []
for p, s in zip(progresses, speeds) :
day = math.ceil((100-p)/s)
if not Q : # 큐가 비어있으면 그냥 추가
Q = [day]
else : # 큐에 한 개 이상 있을 때
if day > Q[0] : # 현재 값이 큐 내부의 가장 큰 값보다 크면
answer.append(len(Q))
Q = [day]
else : # 현재 값이 큐 내부의 갖아 큰 값보다 작거나 같다면
Q.append(day)
answer.append(len(Q)) # 루프를 나온 후 마지막 값
return answer
저번 문제에서 배웠던 zip을 잘 활용한 것 같다. 뿌듯!
나머진 문제가 쉬웠다.
더 나은 풀이나 구경하자.
더 나은 풀이
def solution(progresses, speeds):
Q=[]
for p, s in zip(progresses, speeds):
if len(Q) == 0 or Q[-1][0] < -((p-100)//s):
Q.append([-((p-100)//s),1])
else:
Q[-1][1]+=1
return [q[1] for q in Q]
해시처럼 구성해서 풀어낸 답변.
len(Q)를 이용해서 비어있는 리스트를 잡아낼 수 있구나.
Q[-1][0]은 가장 마지막 해시의 키.
-((p-100)//s) 이게 진짜 미쳤다 싶었는데,
그냥 (p-100)/s 를 진행하면 나머지가 남아 올림이 필요하다.
근데 math 라이브러리 쓰기 싫어서 음수로 계산해버림.
양수에서 소수점 올림 == 음수에서 소수점 버림 이니까.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그 후에 작거나 같으면 해시의 값 증가시키고…
해시의 값들만 리스트로 반환!
음수로 나누는 건 진짜 깜짝 놀랐다.
두고두고 써먹자.
댓글남기기