반응형
문제
택배를 배달하고 효율적으로 수거하는 방법을 구하는 문제다.
구현
최대한 먼 곳부터 처리하는 것이 효율적이기 때문에 deliveries, pickups 리스트를 뒤집고 시작할 것이다.
그러고 맨뒤부터 차례대로 배달과 수거를 미리 계산하도록 구현하면 되는 간단한 문제다.
코드로 보면 이해가 쉬울 것이다.
코드
def solution(cap, n, deliveries, pickups):
answer=0
d,p=0,0
deliveries.reverse()
pickups.reverse()
for i in range(n):
d+=deliveries[i]
p+=pickups[i]
while d>0 or p>0:
d-=cap
p-=cap
answer += (n-i)*2
return answer
여기서 d와 p는 각각 deliver, pickup의 약자로 사용했다.
reverse를 사용해 뒤집은 후 (0번 index가 가장 먼 집이 된다.)
배달할 집과 수거할 집의 택배 개수를 0번 index부터 각각 d와 p에 더해준다
d와 p 모두 0 이하라면 배달, 수거를 할 필요가 없기 때문에 따로 처리를 해주지 않는다.
d와 p 둘 중 하나라도 1 이상 일 때 d와 p모두에서 cap만큼 빼준다.
-> 여기서 마이너스가 돼도 상관없다는 걸 이해하면 문제가 쉽게 느껴질 것이다.
그 후 배달/수거를 해당 index의 집에 한 것이기 때문에 (n-i) * 2를 answer에 더해준다. (뒤집어서 n-i로 계산, 왕복으로 *2)
카카오 블라인드 문제 치고는 쉽게 나온 문제다.
추가...
이전에 코딩테스트 입문을 정리해서 올렸는데 너무 쉬운 것 같아서 따로 요청이 없다면 난이도가 적당히 있는 문제들로 포스팅을 시작하려고 한다.
기존 문제들이 알고리즘을 공부할 필요가 없었다면 이제는 알고리즘을 따로 공부할 필요가 있는 문제들을 몇 개씩 넣어보려고 한다.
반응형
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 배열 조각하기 Python 풀이 (2) | 2023.04.21 |
---|---|
[프로그래머스] 요격 시스템 python 풀이 (1) | 2023.04.17 |
[프로그래머스] 두 원 사이의 정수 쌍 Python 풀이 (0) | 2023.04.17 |
[Codility] Pi Code Challenge Python (1) | 2023.04.14 |
[프로그래머스] 방의 개수 Python 풀이 (1) | 2023.04.13 |
댓글