Hello Computer Vision

백준 알고리즘 10811번 [바구니 뒤집기] 파이썬 본문

백준알고리즘/구현

백준 알고리즘 10811번 [바구니 뒤집기] 파이썬

지웅쓰 2023. 4. 12. 00:43

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

 

10811번: 바구니 뒤집기

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

www.acmicpc.net

이전 배열 문제랑 비슷한 형식

N : 번호가 적혀있는 바구니의 개수

M : 뒤집는 횟수

 

M에 따라 반복문을 돌려주고, 횟수마다 i, j 를 지정한다. i번째부터 j번째까지의 숫자를 역순으로 한다.

 

반복문 안에 반복문을 또 만드는데 여기서 횟수는 j - i + 1이다.

기존 i번째 숫자는 다른 곳에 저장해놨다가, j번째 바구니에 할당하고, i번째와 j번째 바구니의 순서를 바꾼다. 나는 주로 리스트를 만들 때 0을 포함해서 만들고 나중에 출력할 때 0을 제외하는 방식을 사용한다. 인덱스를 따로 1빼고 하는 것이 번거롭다.

n, m = map(int, input().split())

pocket = [i for i in range(0, n+1)]


for _ in range(m):
    i, j = map(int, input().split())
    r = j - i + 1
    for k in range(r // 2):
        temp = pocket[i]
        pocket[i] = pocket[j]
        pocket[j] = temp
        i += 1
        j -= 1
for i in pocket[1:]:
    print(i, end = ' ')