업데이트:

1680번 - 쓰레기 수거

문제 이해

다음의 규칙으로 쓰레기차가 이동할 때, 총 이동거리를 구하는 구현 문제

  1. 쓰레기의 양 == 용량
  2. 지점의 쓰레기를 실었을 때 쓰레기차의 용량을 넘김
  3. 더 이상 쓰레기를 실을 지점이 없음

모든 지점의 쓰레기를 수거해 쓰레기장에 도착했을 때 끝나며, 한 지점에서 쓰레기를 실을 때 그 지점의 쓰레기를 모두 실어야 한다.

접근

구현해 봅시다

어떤 한 지점에서 쓰레기장으로 돌아갈 때에 그지점으로 오는 거리 + 쓰레기장까지 돌아가는 거리 즉, 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등. 더 줄일 수 있을 것 같지만, 일단 여기까지..

댓글남기기