백준 10811번 풀이

문제

이제 배열을 슬라이싱해서 뒤집어봅시다.

풀이

사실 10813번 문제랑 입력하는 부분은 같으니까 여기서는 생략하고 로직만 다뤄봅시다.

파이썬에서 리스트 배울 때 함께 배우는게 인덱싱과 슬라이싱이다. 슬라이싱은 뭐냐면 배열을 말 그대로 ‘자르는’고, 여기서도 배열을 입력받은 부분까지 ‘잘라서’ ‘뒤집어서’ ‘끼워넣는’ 절차를 거칠 거다.

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())
    change_basket = basket[x-1:y]
    change_basket = change_basket[::-1]
    basket[x-1:y] = change_basket
    print(basket)

이게 로직이다. 리스트에서 일부분을 가져와 변수에 담고 뒤집은 다음 원래 리스트에 끼워넣는다. 끝이다. 아, 슬라이싱은 1을 안 빼냐고? 원래 파이썬 슬라이싱은 x 이상 y 미만이다. 컴퓨터 시점에서는 0번 바구니부터 시작이니까 입력값이 1 4일때 0 4로 슬라이싱하게 되면 0, 1, 2, 3번째 바구니까지가 범위가 된다. 사람 입장에서는 4번 바구니인 것이 컴퓨터 입장에서는 3번 바구니이기 때문.

import sys 
N, M = map(int,sys.stdin.readline().split())
basket = list(range(1,N+1))

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())
    change_basket = basket[x-1:y]
    change_basket = change_basket[::-1]
    basket[x-1:y] = change_basket

print(*basket)

순서 바꾸고 출력할 때 언패킹 하면 끝이다.