본문 바로가기
백준

[백준] 10811번 : 바구니 뒤집기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 9. 30.
728x90
반응형

 

 

10811번: 바구니 뒤집기

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 바구니 개수와 바구니를 뒤집을 횟수를 입력받는다. N, M = map(int, sys.stdin.readline().split())
  3. 각 바구니를 리스트로 생성한다. basket = list(i for i in range(N + 1))
  4. 바구니를 뒤집을 횟수만큼 반복하며 for _ in range(M)
  5. 뒤집을 바구니의 구간을 입력받는다. i, j = map(int, sys.stdin.readline().split())
  6. 바구니를 뒤집을 범위에서 가운데를 기준으로 양 옆을 차례로 바꿔주면 된다.
  7. i는 무조건 j보다 작거나 같으므로 i가 j보다 커질 때까지 반복하며 while (i < j)
  8. 양 끝에 있는 두 바구니를 바꿔준다. basket[i], basket[j] = basket[j], basket[i]
  9. 앞쪽 바구니 번호는 증가시키고 i += 1
  10. 뒤쪽 바구니 번호는 감소시킨다. j -= 1
  11. 모두 뒤집어준 결과를 하나씩 출력한다. for i in range(1, N + 1): print(basket[i], end=' ')
반응형

3. 소스코드

import sys

N, M = map(int, sys.stdin.readline().split())

basket = list(i for i in range(N + 1))
for _ in range(M):
    i, j = map(int, sys.stdin.readline().split())
    while (i < j):
        basket[i], basket[j] = basket[j], basket[i]
        i += 1
        j -= 1
        
for i in range(1, N + 1):
    print(basket[i], end=' ')
728x90
반응형