import sys
N, M = map(int, sys.stdin.readline().split())
basket = list(range(1, N+1))
for _ in range(M):
i, j = map(int, sys.stdin.readline().split())
basket[i-1:j] = basket[i-1:j][::-1]
print(*basket)
1. 빠른 입력 처리
import sys
N, M = map(int, sys.stdin.readline().split())
백준과 같은 온라인 저지 환경에서는 입력 데이터의 양이 많을 수 있기 때문에, input() 대신 sys.stdin.readline()을 사용하는 경우가 많다.
sys.stdin.readline()은 표준 입력을 빠르게 읽어오는 함수이며, split()을 통해 공백을 기준으로 문자열을 분리한 뒤 map(int, ...)을 이용해 각 값을 정수형으로 변환한다.
이렇게 하면 한 줄에 입력된 두 개의 정수를 각각 N과 M 변수에 저장할 수 있다.
2. 리스트 생성(range) 사용
basket = list(range(1, N+1))
range(1, N+1)은 1부터 N까지의 정수를 생성한다.
이를 list()로 감싸면 [1, 2, 3, ..., N] 형태의 리스트가 만들어진다.
문제에서 처음에는 각 바구니에 자신의 번호와 같은 공이 들어 있다고 했기 때문에, 이를 표현하기 위해 1부터 N까지의 숫자로 리스트를 초기화한다.
3. 반복문
for _ in range(M):
range(M)을 사용하여 M번 반복하는 반복문을 만든다.
여기서 _는 반복 횟수만 필요하고 실제로 변수 값을 사용하지 않을 때 관례적으로 사용하는 변수 이름이다.
즉, 이 반복문은 바구니를 뒤집는 작업을 M번 수행하기 위한 구조이다.
4. 여러 정수 입력 처리
i, j = map(int, sys.stdin.readline().split())
한 줄에 두 개의 정수가 입력될 때 사용하는 파이썬의 대표적인 입력 처리 패턴이다.
- split() : 공백 기준으로 문자열을 나눔
- map(int, ...) : 나누어진 문자열을 정수로 변환
- i, j = : 두 개의 값을 각각 변수에 저장
문제에서는 i번째 바구니부터 j번째 바구니까지의 범위를 뒤집어야 하므로, 해당 범위를 입력받기 위해 이 문장을 사용한다.
5. 리스트 슬라이싱 + 뒤집기
basket[i-1:j] = basket[i-1:j][::-1]
이 부분이 문제의 핵심 로직이다.
basket[i-1:j는 리스트에서 i번째 바구니부터 j번째 바구니까지의 구간을 슬라이싱하는 코드이다.
파이썬 리스트는 인덱스가 0부터 시작하기 때문에 i-1을 사용한다.
[::-1]은 리스트를 역순으로 뒤집는 슬라이싱 문법이다.
즉, basket[i-1:j][::-1]은 선택한 구간을 뒤집은 새로운 리스트가 된다.
6. 리스트 언패킹 출력
print(*basket)
*는 언패킹(unpacking) 연산자이다.
리스트의 요소들을 하나씩 꺼내어 print()에 전달한다.
🧐 리스트의 특정 구간을 뒤집을 때는 list[a:b] = list[a:b][::-1] 패턴을 떠올리기
'backjeon > Bronze' 카테고리의 다른 글
| Baekjoon(백준) - 10998 (팰린드롬인지 확인하기) | Python (0) | 2026.03.10 |
|---|---|
| Baekjoon(백준) - 2743 (단어 길이 재기) | Python (0) | 2026.03.09 |
| Baekjoon(백준) - 5597 (과제 안 내신 분..?) | Python (0) | 2026.03.07 |
| Baekjoon(백준) - 10813 (공 바꾸기) | Python (0) | 2026.03.06 |
| Baekjoon(백준) - 10810 (공 넣기) | Python (0) | 2026.03.05 |