barcode

백준 10811번 풀이

BOJ/[BOJ] Python

문제

https://www.acmicpc.net/problem/10811

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

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

 

풀이

사실 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)

순서 바꾸고 언패킹 하면 끝이다. 

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 2743번 풀이  (0) 2023.05.30
백준 27866번 풀이  (0) 2023.05.28
백준 10813번 풀이  (0) 2023.05.28
백준 10810번 풀이  (0) 2023.05.28
백준 25314번 풀이  (0) 2023.05.28