https://school.programmers.co.kr/learn/courses/30/lessons/150369
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해
1. i 번째 집에 택배를 배달/수거하기 위해서는 i 번째까지는 무조건 가야 한다.
2. 마지막 집에 우선 cap을 실어 출발
3. 마지막 집부터 처음 집으로 이동하면서 현재 배달/수거 가능한 택배 개수를 넣어 저장할 변수를 만든다.
=> deliver_remain, pick_remain
4. 배달/수거하면서 이동한 거리를 answer라는 변수에 저장
5. 택배를 배달/수거하는데 필요한 배달/수거 개수가 잔여 배달/수거 개수(deliver_remain, pick_remain)보다 클 경우, 그 집까지 한 번 더 와야함 => 배달 가능한 개수 + cap
코드
def solution(cap, n, deliveries, pickups):
answer = 0 # 총 이동 횟수
deliver_remain = 0 # 현재 배달 가능한 개수
pick_remain = 0 # 현재 수거 가능한 개수
# 맨 마지막 집부터 첫 번째 집까지 역순으로 반복
for i in range(n-1, -1, -1):
cnt = 0 # 한 집에서의 이동 횟수
while deliver_remain < deliveries[i] or pick_remain < pickups[i]:
cnt += 1
deliver_remain += cap
pick_remain += cap
deliver_remain -= deliveries[i]
pick_remain -= pickups[i]
answer += (i + 1) * cnt
# 왕복 거리
return answer * 2
문제 회고
역순으로 돌면서 체크한다는 것과 변수 설정이 어려웠다
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv2. 숫자 변환하기(Python) (0) | 2024.02.03 |
---|---|
[프로그래머스]Lv3. 주사위 고르기(Python) (0) | 2024.02.02 |
[프로그래머스]Lv2. 도넛과 막대그래프(Python) (0) | 2024.01.31 |
[프로그래머스]Lv.2 피로도(Python) (0) | 2024.01.02 |
[프로그래머스]Lv.2 모음사전(Python) (0) | 2024.01.02 |