나의 풀이
f=lambda:map(int, input().split())
n_basket, n_round = f()
*ans, = range(n_basket + 1)
exec("i,j,k=f();ans[i:j+1]=ans[k:j+1]+ans[i:k];"*n_round)
print(*ans[1:])
백준 10811 - 바구니 뒤집기와 매우 유사한데, k
를 기준으로 뒤집어야하기 때문에 범위 설정에 유의해야 했다. 특히 python에서 슬라이싱을 할 때에 list[start:end]이면 start부터 (end-1)요소까지 범위이기 때문에 끝부분에 +1을 해줘야하는지 판단이 헷갈렸다. 그럴 땐 표나 그림을 이용하면 수월하게 해결할 수 있다.
(변형 전)
begin | begin+1 | … | mid-1 | mid | mid+1 | end-1 | end |
---|---|---|---|---|---|---|---|
i | i+1 | … | k-1 | k | … | j-1 | j |
(변형 후)
mid | mid+1 | end-1 | end | begin | begin+1 | … | mid-1 |
---|---|---|---|---|---|---|---|
k | … | j-1 | j | i | i+1 | … | k-1 |
list에서 [k:j+1]과 [i:k] 범위를 잘라낸 뒤에 이어붙여, [i:j+1] 영역에 대응시키면 된다는 것을 시각적으로 확인할 수 있다.