반응형
밑의 링크는 프로그래머스에서의 문제 링크입니다.
주의해야 할 점
progresses에서 뒤에 있는 기능의 개발 일정이 앞에 있는 기능의 개발 일정보다 먼저 끝날 수 있다 하더라도,
progresses에서 앞에 있는 기능이 먼저 배포돼야 뒤에 있는 기능을 배포할 수 있습니다.
생각한 풀이 과정
- 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 리스트 progresses와 각 작업의 개발 속도가 적힌 정수 리스트 speeds, 두 리스트에서 작업 순서를 뜻하는 인덱스는 같습니다.
- 이전까지의 기능에서 배포하기까지 걸린 일수를 저장할 변수를 하나 만들어줍니다.
- 기능을 하나씩 반복해봅니다.
- 현재 기능의 개발을 완성하고 배포까지의 일수를 계산합니다.
- 2번 과정의 변수인 이전까지의 기능을 배포하기까지 걸린 일수가 4번 과정의 현재 기능 배포 일수보다 크거나 같다면, 이전 기능을 배포해야 현재 기능도 배포할 수 있으므로, 이전 기능을 배포할 때 현재 기능을 같이 배포하면 됩니다.
- 2번 과정의 변수인 이전까지의 기능을 배포하기까지 걸린 일수가 4번 과정의 현재 기능 배포 일수보다 작다면, 이전 기능은 이미 배포가 되었을 것이므로, 현재 기능은 이전 기능과는 따로 배포됩니다.
제출한 파이썬 코드
# 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 리스트 pregresses,
# 각 작업의 개발 속도가 적힌 정수 리스트 speeds가 매개변수로 주어집니다.
def solution(progresses, speeds):
# 각 배포마다 배포되는 기능의 개수를 저장할 리스트 변수를 선언합니다.
answer = []
# 기능의 개수를 저장하는 변수를 선언합니다.
progresses_len = len(progresses)
# 가장 최근에 배포되었을 때까지 걸린 작업 일수를 저장할 변수를 선언합니다.
prev_work_day = None
# 기능 하나마다 반복해봅니다.
for idx in range(progresses_len):
# 현재 기능의 작업의 진도를 저장하는 변수를 선언합니다.
progress = progresses[idx]
# 현재 기능의 개발 속도를 저장하는 변수를 선언합니다.
speed = speeds[idx]
# 현재 기능을 개발하는데 걸리는 작업 일수를 저장하는 변수를 선언합니다.
work_day = (100 - progress) // speed
# 만약 남은 진도를 개발 속도로 나누었을 때 나머지가 0이 아니라면
if (100 - progress) % speed != 0:
# 작업 일수에 1을 더해줍니다.
work_day += 1
# 아직 배포된 기능이 없다면
if prev_work_day == None:
# prev_work_day에 work_day의 값을 넣어줍니다.
prev_work_day = work_day
# answer에 1을 넣어줍니다.
answer.append(1)
# 현재 기능의 작업 일수가 prev_work_day보다 작거나 같다면
elif work_day <= prev_work_day:
# 현재 기능은 가장 최근에 배포한 기능을 배포할 때 같이 배포하므로
# answer의 가장 끝 값에 1을 더해줍니다.
answer[-1] += 1
# 현재 기능의 작업 일수가 prev_work_day보다 크다면
elif work_day > prev_work_day:
# 가장 최근에 배포한 기능을 배포한 이후에 배포할 수 있으므로
# answer에 1을 넣어줍니다.
answer.append(1)
# prev_work_day에 work_day의 값을 넣어줍니다.
prev_work_day = work_day
# 각 배포마다 배포된 기능의 개수를 저장한 리스트를 반환합니다.
return answer
제출 결과
느낀 점
문제 카테고리에 '스택/큐'라고 되어있는데
스택이나 큐를 굳이 의식하지 않고 푼 문제입니다.
스택이나 큐를 사용하면 더 효율적인 코드를 짤 수 있는지 궁금하네요.
다른 사람들의 코드도 보고 공부해야겠습니다.
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
반응형
댓글