import math
progresses = [93, 30, 55]
# progresses = [95, 90, 99, 99, 80, 99]
speeds = [1, 30, 5]
# speeds = [1, 1, 1, 1, 1, 1]
# 정답 : [2, 1], [1, 3, 2]
def solution(progresses, speeds):
answer = []
remainTime = []
# 남은 시간 (걸리는 시간)
for i in range(len(progresses)):
# print("a = ", (100 - progresses[i]) / speeds[i])
# print("b = ", float(100 - progresses[i]) / speeds[i])
# print("c = ", math.ceil(float(100 - progresses[i]) / speeds[i]))
remainTime.append(math.ceil((100 - progresses[i]) / speeds[i]))
# 반올림 = round, 올림 = ceil,
# print(remainTime)
visit = [0] * len(progresses)
# print(visit)
cnt = 1
curVal = 0
status = True
for i in range(0, len(remainTime)):
print( " i = ", i)
if visit[i] == 1:
print(i, "이미 왔던 곳, continue")
continue
visit[i] = 1
print(i, " 방문 체크")
for j in range(i+1, len(remainTime)):
if j == len(progresses)-1:
answer.append(cnt+1)
status = False
break
if remainTime[i] <= remainTime[j]:
answer.append(cnt)
cnt = 1
break
else:
visit[j] = 1
cnt+=1
print("cnt = ", cnt)
if status == False:
break
print(answer)
return answer
solution(progresses, speeds)
ceil을 이용해서 올림을 시켜주면 그 작업이 마칠 때까지 남은 일자를 구할 수 있다는 것. 까지 생각해냈다.
그 다음이 출력이었는데 그걸 도저히 모르겠더라
언제나 그래왔듯 정답 코드는 그 어렵던 걸 이렇게나 쉽게 구한다.
def solution(progresses, speeds):
answer = []
remainTime = []
# 남은 시간 (걸리는 시간)
for i in range(len(progresses)):
# print("a = ", (100 - progresses[i]) / speeds[i])
# print("b = ", float(100 - progresses[i]) / speeds[i])
# print("c = ", math.ceil(float(100 - progresses[i]) / speeds[i]))
remainTime.append(math.ceil((100 - progresses[i]) / speeds[i]))
# 반올림 = round, 올림 = ceil,
# print(remainTime)
count = 0
for a in remainTime:
if a > count:
answer.append(1)
count = a
else:
answer[-1] += 1
# print(answer)
return answer
2중 for문에다가 상태를 나타내는 불리언 값까지 넣어가면서 생각했는데 그냥 for문 하나 if 하나 else 하나면 끝이었다.
문제의 의도대로 스택/큐 개념을 이용한 방식
def solution(progresses, speeds):
answer = []
# 작업이 없을 때까지 반복
while progresses:
for i in range(len(progresses)):
progresses[i] += speeds[i]
# 하루 작업 했다. speeds[i] => 작업량 하루치 작업
# 하루 작업 하고 나면 => 94, 60, 60
# 하루 작업 하고 나면 => 95, 90, 65
# 하루 작업 하고 나면 => 100, 240, 90
cnt = 0
while progresses and progresses[0] >= 100:
# 제일 첫 번째 작업이 작업 끝났어 => 100
progresses.pop(0)
# 첫 번째 작업 pop
speeds.pop(0)
# 첫 번째 작업에 해당하는 속도 pop
cnt += 1
# cnt = 1 -> 100 끝난거 한개
# 다시 while문 돌았을 때 두 번째꺼도 100 넘었어
# 그럼 그거 pop 하고 cnt = 2 돼
# 이제 작업 끝난게 없어 => 세 번째꺼는 100이 안돼 => 다시 while 돌아
if cnt > 0:
answer.append(cnt)
return answer