[BOJ / Python] 10811 바구니 뒤집기

도니·2023년 3월 22일
0

BOJ / Python

목록 보기
21/104
post-thumbnail

문제

백준 10811 바구니 뒤집기

코드

n, m = map(int, input().split())
box = [i for i in range(1, n + 1)]

for _ in range(m):
    i, j = map(int, input().split())
    length = j - i + 1 #역순으로 바꿀 문자열의 길이
    for _ in range(length//2):
        t = box[i-1]
        box[i-1] = box[j-1]
        box[j-1] = t
        i += 1
        j -= 1

for i in range(n):
    print(box[i], end = " ")

i번부터 j번까지의 범위 내에 있는 바구니를 역순으로 배열하는 것은 i번째 바구니와 j번째 바구니, i+1번째 바구니와 j-1번째 바구니, i+2번째 바구니와 j-2번째 바구니,... 를 바꾸는 것과 같다.
예를 들어 1번부터 5번까지의 바구니를 역순으로 배열하는 것은 1번 바구니와 5번 바구니, 2번 바구니와 4번 바구니를 바꾸는 것이랑 같다. 바꿔야하는 바구니의 전체 수를 n이라고 할 때, nj-i+1 이다.

n 이 짝수일 경우, 즉, 짝수개의 바구니를 바꿀 때에는 바구니끼리 바꾸는 행동을 n/2 번 하면 되지만, n 이 홀수인 경우, 즉 홀수개의 바구니를 바꿔야할 때는 (n-1)/2 번 바꾸는 행동을 해야한다. 이는 정수 몫을 구하는 연산자인 // 를 이용하여 다음과 같이 간단히 표현할 수 있다: n//2

profile
안녕하세요, 🌱새싹개발자 도니💡입니다!

0개의 댓글

관련 채용 정보