1. 문제 목적
이 문제의 주된 목적은 리스트 조작 기술과 슬라이스를 통한 부분 리스트의 뒤집기를 학습하는 데 있습니다. 문제를 해결함으로써, 리스트의 특정 부분을 선택하고, 그 부분을 수정하는 방법을 익히게 됩니다. 이는 데이터 구조와 알고리즘을 다루는 데 있어 필수적인 기술 중 하나입니다.
2. 핵심 개념
- 리스트 슬라이싱: 리스트의 일부분을 선택하는 기술입니다. 리스트[start:end] 형태로 사용하며, start 인덱스부터 end-1 인덱스까지의 요소를 선택합니다.
- 리스트 뒤집기: 선택된 리스트 부분을 반대 순서로 배치합니다. 이를 위해 슬라이스와 [::-1] (뒤집기) 연산을 사용합니다.
3. 문제 해결 절차
- 초기 바구니 상태를 리스트로 표현합니다.
- 주어진 명령의 수만큼 반복하여 각 명령을 처리합니다.
- 각 명령에서 뒤집을 범위를 결정합니다.
- 해당 범위의 리스트 부분을 슬라이싱하여 뒤집습니다.
- 최종 바구니 상태를 출력합니다.
4. 코드 작성
n, m = map(int, input().split()) # n: 바구니 개수, m: 명령의 수
baskets = list(range(1, n+1)) # 초기 바구니 상태
for _ in range(m):
i, j = map(int, input().split()) # 뒤집을 범위
baskets[i-1:j] = baskets[i-1:j][::-1] # 범위 뒤집기
print(' '.join(map(str, baskets))) # 최종 상태 출력
5. 코드 분석
- n, m = map(int, input().split()): 사용자로부터 바구니의 개수(n)와 명령의 수(m)를 입력받습니다.
- baskets = list(range(1, n+1)): 1부터 n까지의 숫자로 바구니의 초기 상태를 생성합니다.
- for _ in range(m):: 사용자로부터 m개의 뒤집을 범위를 입력받아 처리합니다.
- baskets[i-1:j] = baskets[i-1:j][::-1]: i번째부터 j번째 바구니까지 선택하여 그 부분을 뒤집습니다. 파이썬의 인덱스는 0부터 시작하기 때문에 i-1을 사용합니다.
- print(' '.join(map(str, baskets))): 최종 바구니 상태를 공백으로 구분하여 출력합니다.
'알고리즘, 자료구조' 카테고리의 다른 글
[백준| 단계별로 풀어보기 5단계 문자열 | Python] 11720번 숫자의 합 (1) | 2024.04.07 |
---|---|
[백준| 단계별로 풀어보기 5단계 문자열 | Python] 9086번 문자열 (0) | 2024.04.07 |
[백준| 단계별로 풀어보기 4단계 1차원 배열 | Python] 3052번 나머지 (0) | 2024.04.05 |
[백준| 단계별로 풀어보기 4단계 1차원 배열 | Python] 10813번 공 바꾸기 (0) | 2024.04.04 |
[백준| 단계별로 풀어보기 4단계 1차원 배열 | Python] 10870번 공 넣기 (0) | 2024.04.04 |