본문 바로가기

알고리즘, 자료구조

[백준| 단계별로 풀어보기 4단계 1차원 배열 | Python] 10813번 공 바꾸기

1. 문제 목적

이 문제는 리스트의 인덱싱과 요소 교환을 통해 파이썬에서의 기본적인 데이터 조작 방법을 학습하는 데 중점을 둡니다. 이를 통해 사용자는 데이터 구조에 저장된 요소에 접근, 수정하는 기본적인 방법을 익히게 됩니다.

2. 핵심 개념

  • 리스트 인덱싱: 리스트에서 특정 위치의 요소에 접근하는 방법. 리스트[인덱스]의 형태로 사용됩니다. 파이썬의 인덱스는 0부터 시작합니다.
  • 요소 교환: 파이썬에서 두 변수의 값을 교환하는 가장 간단한 방법은 a, b = b, a의 형태로 사용하는 것입니다. 이 문제에서는 이 방법을 사용하여 두 바구니의 공을 교환합니다.

3. 문제 해결 절차

  1. 초기 설정: N개의 바구니를 준비하고 각 바구니에 1부터 N까지 순서대로 번호를 부여합니다.
  2. 교환 명령 실행: 주어진 교환 명령에 따라 지정된 두 바구니의 공을 교환합니다.
  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], baskets[j-1] = baskets[j-1], baskets[i-1]  # 바구니의 공 교환

print(*baskets)  # 결과 출력

학습을 위한 쉬운 코드

N, M = map(int, input().split())  # N: 바구니의 수, M: 교환 횟수
baskets = [i for i in range(1, N+1)]  # 바구니 초기화

for _ in range(M):
    i, j = map(int, input().split())  # 교환할 바구니 번호 입력
    temp = baskets[i-1]  # 첫 번째 바구니의 공 임시 저장
    baskets[i-1] = baskets[j-1]  # 두 번째 바구니의 공을 첫 번째 바구니로 이동
    baskets[j-1] = temp  # 임시 저장해둔 공을 두 번째 바구니로 이동

for basket in baskets:  # 결과 출력
    print(basket, end=' ')

5. 코드 분석

최적화된 코드 분석

  • N, M = map(int, input().split()): 사용자로부터 바구니의 수와 교환 횟수를 입력받습니다.
  • baskets = list(range(1, N+1)): 1부터 N까지의 번호를 가진 바구니를 리스트로 생성합니다.
  • i, j = map(int, input().split()): 교환할 두 바구니의 번호를 입력받습니다.
  • baskets[i-1], baskets[j-1] = baskets[j-1], baskets[i-1]: 파이썬의 다중 할당을 활용하여 두 바구니의 공을 교환합니다.
  • print(*baskets): 최종적으로 각 바구니에 들어있는 공의 번호를 출력합니다.

학습을 위한 쉬운 코드 분석

  • 이 코드는 최적화된 코드와 비슷한 로직을 따르지만, 공을 교환하기 위해 임시 변수 temp를 사용합니다.
  • temp = baskets[i-1]: 첫 번째 바구니의 공을 임시 변수에 저장합니다.
  • baskets[i-1] = baskets[j-1]: 두 번째 바구니의 공을 첫 번째 바구니에 넣습니다.
  • baskets[j-1] = temp: 임시 변수에 저장된 첫 번째 바구니의 공을 두 번째 바구니에 넣습니다.

6. 마무리

리스트의 인덱스의 값을 변경하는 방법을 알게 되었다.