[백준 1680] 쓰레기 수거 Python
업데이트:
문제 이해
다음의 규칙으로 쓰레기차가 이동할 때, 총 이동거리를 구하는 구현 문제
- 쓰레기의 양 == 용량
- 지점의 쓰레기를 실었을 때 쓰레기차의 용량을 넘김
- 더 이상 쓰레기를 실을 지점이 없음
모든 지점의 쓰레기를 수거해 쓰레기장에 도착했을 때 끝나며, 한 지점에서 쓰레기를 실을 때 그 지점의 쓰레기를 모두 실어야 한다.
접근
구현해 봅시다
어떤 한 지점에서 쓰레기장으로 돌아갈 때에 그지점으로 오는 거리 + 쓰레기장까지 돌아가는 거리 즉,
x_i * 2
를 더해준다.
돌아가는 시점에서야 지점까지 오는 거리를 처리하면 구현이 쉬워진다.
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys
input = sys.stdin.readline
def getInts(): return map(int, input().split())
for _ in range(int(input())):
W, N = getInts()
X, w = 0, W
for _ in range(N): # 규칙 3번
x_i, w_i = getInts()
if w - w_i < 0: # 규칙 2번 - 비우고 다시오기
X += x_i*2
w = W - w_i
elif w - w_i == 0: # 규칙 1번
X += x_i*2
w = W
else:
w -= w_i
if w != W: # 마지막 집감
X += x_i*2
print(X)
숏코딩
1
2
3
4
5
6
7
r,g=range,lambda:map(int,input().split())
for _ in r(*g()):
W,N=g()
X,w=0,W
for _ in r(N):a,b=g();exec([["w-=b","X+=a*2;w=W"][w-b<1],"X+=a*2;w=W-b"][w-b<0])
if w!=W:X+=a*2
print(X)
1번줄은 scvhero 님의 코드를 참고했다.
2022-05-04 기준 1등. 더 줄일 수 있을 것 같지만, 일단 여기까지..
댓글남기기