반응형
프로그래머스의 레벨 2 문제 기능개발
문제 요구 조건
리스트의 가장 앞에 있는 원소가 100을 넘었을 때, 뒤의 원소가 몇개나 100을 넘겼는지 확인해야 한다.
풀이 방법
리스트의 범위가 작아서 리스트의 모든 원소에 값을 더해주면서 했다. 만약 리스트의 범위가 크다면 총 작업 일수를 저장해서 진도율에 곱해주면 더하는 반복을 없앨 수 있다.
# 작업 목록이 빌 때 까지 반복하는데
# 가장 앞에 있는 작업이 며칠 걸리는지 세고, 그만큼 진도율을 더해준다.
# 진도율이 100을 넘으면 카운트하고 다음 작업 목록으로 간다
# 안넘으면 그 앞까지 작업 목록을 뺀다. 이걸 반복한다.
import math
def solution(progresses, speeds):
answer = []
while len(progresses) > 0:
day = math.ceil((100 - progresses[0]) / speeds[0])
for i in range(len(progresses)):
progresses[i] += speeds[i] * day
cnt = 1
for i in range(1, len(progresses)):
if progresses[i] >= 100:
cnt += 1
else:
break
progresses = progresses[cnt:]
speeds = speeds[cnt:]
answer.append(cnt)
return answer
다른 사람의 풀이
작업량이 100을 넘기까지 필요한 날을 계산해서, 앞의 날이 뒤의 날보다 크면 뒤의 날도 포함되는 것을 확인하는 풀이가 있었다. O(N)으로 더 효율적이였다. 문제를 완탐으로 해결한 후에, 더 효율적으로 해결할 수 있는 방법을 계속 생각해야지..!
반응형
'Computer science > Algorithm' 카테고리의 다른 글
[프로그래머스] Python3 - 하노이의 탑 (0) | 2023.11.17 |
---|---|
[프로그래머스] Python3 - 올바른 괄호 (0) | 2023.11.16 |
[프로그래머스] Python3 - 의상 (0) | 2023.11.14 |
[프로그래머스] Python3 - 전화번호목록 (1) | 2023.11.13 |
[프로그래머스] Python3 - H Index (0) | 2023.11.10 |