문제
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 |