반응형
백준 10811번 / 바구니 뒤집기 : https://www.acmicpc.net/problem/10811
이번 문제는 앞서 풀어본 바구니와 공 문제와 비슷하다. N개의 바구니가 있고, 각 바구니에는 1번부터 N번까지의 번호가 순서대로 적혀있다. M번 동안 특정 구간 [a, b]를 선택하여 그 구간에 있는 바구니들의 순서를 역순으로 뒤집는 작업을 한다. 모든 작업이 끝난 후, 1번 바구니부터 N번 바구니까지 각각 어떤 숫자가 적혀있는지 공백으로 구분하여 출력해야 한다.
이 또한 swap 매커니즘을 이용하면 간단히 해결할 수 있다.
문제를 푸는 흐름은 다음과 같다.
- 바구니의 개수 N과 순서를 뒤집는 횟수 M을 입력받는다.
- 크기가 N인 리스트를 만들고, 각 바구니의 번호에 해당하는 인덱스에 인덱스 +1을 넣어 초기화한다.
- M번 반복하면서 다음을 수행한다:
- 순서를 뒤집을 시작 바구니 번호 a와 끝 바구니 번호 b를 입력받는다.
- 리스트 인덱스는 0부터 시작하므로, a-1번 인덱스부터 b-1번 인덱스까지에 해당하는 부분을 가져온다.
- 가져온 부분 리스트를 역순으로 뒤집는다.
- 뒤집힌 부분 리스트를 원래 리스트의 a-1번 인덱스부터 b-1번 인덱스까지의 위치에 다시 할당한다.
- 모든 작업이 끝나면, 리스트의 모든 요소를 문자열로 변환하여 공백으로 구분해 한 줄에 출력한다.
내가 만든 코드는 다음과 같다.
N, M = map(int,input().split())
list1 = []
for i in range(N):
list1.append(i+1)
for j in range(M):
a, b = map(int,input().split())
temp = list1[a-1:b]
temp.reverse()
list1[a-1:b] = temp
k = ' '.join(map(str,list1))
print(k)
출력 결과는 아래와 같다.

반응형
'파이썬 > 예제' 카테고리의 다른 글
| 백준 1546번 평균 - 헷갈리지말자 (1) | 2025.05.19 |
|---|---|
| 백준 3052번 나머지 - 리스트 2개 사용하기 (0) | 2025.05.19 |
| 백준 5597번 과제 안 내신 분...? - 역시나 리스트 (0) | 2025.05.19 |
| 백준 10813번 공 바꾸기 - 스왑(swap) 사용하기 (0) | 2025.05.19 |
| 백준 10810번 공 넣기 - 리스트 & 조건문 (0) | 2025.05.19 |