흠 이번에는 문제를 조금은 빠르게 풀었다. 리스트 컴프리핸션은 분석 때 많이 쓰던 거라 쉬웠는데 문제를 다 풀고 테스트 케이스 11번이 계속 통과가 안 돼서 보니 D를 만들어 주는 과정에서 math.ceil()을 안쓰고 그냥 나눠준 것이 문제였다... 뭔가 계산 방식이 다른 것 같다. ceil을 안 쓰고 푼 다른 사람 풀이를 보니 너무 복잡해서 도무지 이해가 가지 않았다. 또한 이 문제는 내가 푼 것처럼 풀 순 있지만 다른 사람 풀이를 보니 한 명도 나처럼 푼 사람을 찾을 수 없었다. 알고 보니 이 문제는 시간 복잡도라는 알고리즘을 이용해서 푸는 문제였다. 나는 아직 배우지 못한 부분...ㅎㅎ 어찌 됐든 풀긴 했으나 출제의도를 맞추어서 푼 문제는 아니므로 나중에 알고리즘 스터디를 확실히 하면 다시 풀어본 생각이다.
import math
def solution(progresses, speeds):
answer = []; c =[]
remaining_pg = [100 - i for i in progresses]
D = [math.ceil(x / y) for x, y in zip(remaining_pg, speeds)]
for i in D:
if len(c)==0 or c[0] >= i:
c.append(i)
else:
answer.append(len(c)); c = []
c.append(i)
answer.append(len(c))
print(D)
return answer
아래는 시간복잡도 알고리즘을 푼 사람의 코드이다. 나중에 다시 와서 풀어볼 예정이다.
def solution(progresses, speeds):
print(progresses)
print(speeds)
answer = []
time = 0
count = 0
while len(progresses)> 0:
if (progresses[0] + time*speeds[0]) >= 100:
progresses.pop(0)
speeds.pop(0)
count += 1
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer