Python/백준

🔄 백준 10811 - '바구니 뒤집기' 문제 풀이 가이드#Python

고발초이이 2024. 6. 3. 15:13
반응형
SMALL

🧩 문제 이해하기

상상해봐요! 여러분 앞에 일렬로 놓인 바구니들이 있어요. 각 바구니에는 번호가 적혀 있죠. 우리의 임무는:

  1. 특정 구간의 바구니들을 뒤집기
  2. 여러 번의 뒤집기 작업 후, 최종 바구니 순서 확인하기

🔧 필요한 파이썬 도구들

1. 📋 리스트 (List)

바구니들을 표현해요.

baskets = [1, 2, 3, 4, 5]  # 5개의 바구니

2. ✂️ 슬라이싱 (Slicing)

바구니의 특정 구간을 선택하고 뒤집을 때 사용해요.

baskets[1:4] = [4, 3, 2]  # 2번째부터 4번째까지 바구니를 뒤집어요

3. 🔄 역순 (Reverse)

선택한 구간을 뒤집을 때 사용해요.

segment = [1, 2, 3]
reversed_segment = segment[::-1]  # [3, 2, 1]

🚀 문제 해결 단계

  1. 초기 바구니 상태 만들기
  2. 뒤집기 작업 수행하기
  3. 최종 바구니 상태 확인하기

💻 파이썬 코드로 구현하기

# 바구니 개수(N)와 뒤집기 횟수(M) 입력받기
N, M = map(int, input().split())

# 1. 초기 바구니 상태 만들기
baskets = list(range(1, N+1))

# 2. 뒤집기 작업 수행하기
for _ in range(M):
    i, j = map(int, input().split())
    baskets[i-1:j] = baskets[i-1:j][::-1]

# 3. 최종 바구니 상태 확인하기
print(' '.join(map(str, baskets)))

🧠 코드 설명

  1. N, M = map(int, input().split()): 바구니 개수와 뒤집기 횟수를 입력받아요.
  2. baskets = list(range(1, N+1)): 1부터 N까지 번호가 매겨진 바구니를 만들어요.
  3. for _ in range(M):: M번 뒤집기 작업을 반복해요.
  4. i, j = map(int, input().split()): 뒤집을 구간의 시작(i)과 끝(j)을 입력받아요.
  5. baskets[i-1:j] = baskets[i-1:j][::-1]: i부터 j까지의 바구니를 뒤집어요.
  6. print(' '.join(map(str, baskets))): 최종 바구니 상태를 출력해요.

🌟 예제로 이해하기

입력 예시:

5 3
1 2
3 4
1 5

과정 설명:

  1. 초기 상태: [1, 2, 3, 4, 5]
  2. 1~2 뒤집기: [2, 1, 3, 4, 5]
  3. 3~4 뒤집기: [2, 1, 4, 3, 5]
  4. 1~5 뒤집기: [5, 3, 4, 1, 2]

출력 예시:

5 3 4 1 2

💡 팁

  • 파이썬에서 인덱스는 0부터 시작해요. 그래서 i-1을 사용했답니다!
  • [::-1]은 "처음부터 끝까지, 거꾸로" 라는 의미예요. 아주 유용한 파이썬 트릭이죠!
  • 리스트 조작은 데이터 처리에서 매우 중요해요. 이 문제를 통해 리스트 다루는 실력이 늘어날 거예요!

🎉 마무리

이렇게 하면 바구니 뒤집기 게임을 파이썬으로 구현할 수 있어요!
이 문제를 통해 리스트 조작과 슬라이싱 사용법을 익혔네요.
여러분도 이제 복잡한 리스트 조작을 할 수 있는 실력자가 되었어요! 🏆🎊

반응형
LIST