1. 문제
programmers.co.kr/learn/courses/30/lessons/42586
2. 접근 방법
스택을 이용하면 된다.
1. 기능 개발하는데 걸리는 시간 구해서 리스트에 담기
2-0. 기능 개발하는데 걸리는 시간 리스트 순회하며 현재 값이 전 값과 같거나 작다면 cnt += 1
2-1. 현재 값이 전 값보다 크다면 현재 cnt를 answer에 append하고 cnt 를 1로 초기화
이렇게 생각했다.
3. 코드
python
def solution(progresses, speeds):
answer = []
days = []
for i in range(len(progresses)):
progress = progresses[i]
speed = speeds[i]
day = (100-progress)//speed
if (100-progress)%speed:
day += 1
days.append(day)
cnt = 0
max_val = days[0]
while days:
now = days.pop(0)
if now <= max_val:
cnt += 1
else:
answer.append(cnt)
cnt = 1
max_val = now
answer.append(cnt)
return answer
4. 마치며
프로그래머스는 풀고 난 뒤 다른 사람들의 코드를 보여주는데,
zip을 사용한 풀이가 너무나 인상깊었다.
예전에 zip을 몇번 사용하고 그 이후로 사용을 안했는데,
이 문제는 zip을 사용하는게 진짜 꿀 구현인거같다.
주어진 인자가 progresses, speeds 라는 리스트들이기 때문에
zip으로 묶는게 편할거 같긴하다.
zip도 좋지만, 가장 문제를 정확히 구현한 코드는 이 코드인거 같아서 가져왔다.
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
time을 기준으로 구현한게 멋찌다 8ㅅ8
'Algorithm > Python' 카테고리의 다른 글
[백준 1593] 문자 해독 (0) | 2021.05.05 |
---|---|
[스택/큐] 프린터 (0) | 2021.05.04 |
[백준 2309] 일곱 난쟁이 (0) | 2021.05.03 |
[백준 6588] 골드바흐의 추측 (0) | 2021.05.03 |
[백준 9613] GCD 합 (0) | 2021.05.02 |