본문 바로가기
백준 알고리즘

백준 - 1547번 바구니 뒤집기 문제풀이 [Hellfer]

by Hellfer 2024. 1. 7.
728x90

https://www.acmicpc.net/problem/1547

 

1547번: 공

첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것

www.acmicpc.net

🔷 알고리즘 분류 - 구현, 시뮬레이션 난이도 - 브론즈 3

시뮬레이션을 구현할 때는 일반적으로 다음과 같은 과정을 거칩니다.

1. 문제 정의: 시뮬레이션의 목적을 명확히 정의합니다.

 

이는 어떤 시스템을 모사할 것인지, 어떤 변수를 고려할 것인지, 어떤 결과를 얻고자 하는지 등을 포함합니다.


2. 모델 설계: 시뮬레이션의 규칙과 로직을 설계합니다.

 

이는 시스템의 동작 방식, 각 변수의 역할, 시간 경과에 따른 변화 등을 포함합니다.


3. 코드 구현: 설계한 모델을 파이썬 코드로 구현합니다. 이는 변수 초기화, 로직 구현, 결과 출력 등을 포함합니다.


시뮬레이션 실행 및 분석: 구현한 코드를 실행하여 결과를 얻고, 이를 분석합니다.


4. 시나리오 변경 및 반복: 필요에 따라 변수를 변경하거나, 로직을 수정하면서 시뮬레이션을 반복합니다.

 

이를 통해 다양한 시나리오를 테스트하고, 최적의 전략을 찾을 수 있습니다.

🔶문제 풀이 - 시뮬레이션을 이용한 풀이

# n을 입력 받습니다. n은 공을 바꾸는 작업의 횟수입니다.
n = int(input())

# 3개의 상자를 생성하고, 첫 번째 상자에 공을 넣습니다.
# box 리스트의 각 원소는 상자에 공이 들어있는지를 나타냅니다. 
# 1은 공이 들어있음을, 0은 공이 없음을 의미합니다.
box = [1] + [0]*2

# n번 공을 바꾸는 작업을 수행합니다.
for _ in range(n):
    # 바꿀 상자의 번호 x, y를 입력 받습니다.
    x, y = map(int, input().split())
    
    # x번 상자와 y번 상자의 공을 바꿉니다.
    box[x-1], box[y-1] = box[y-1], box[x-1]
    
# 모든 공을 바꾼 후 어떤 상자에 공이 있는지 확인합니다.
for i in range(3):
    # 만약 i번째 상자에 공이 있다면,
    if box[i] == 1:
        # 그 상자의 번호를 출력합니다.
        print(i+1)

🔶문제 이해하기

다음은 기본적인 swap 코드입니다.

# 두 변수 a와 b의 값을 설정합니다.
a = 5
b = 10

# a와 b의 값을 swap합니다.
a, b = b, a

# a와 b의 값을 출력합니다.
print(a)  # 10
print(b)  # 5

 

위 코드에서 a, b = b, a라는 부분이 바로 swap을 수행하는 코드입니다. 

 

이 코드는 b, a라는 튜플을 만들고, 이 튜플의 값을 a, b에 각각 할당하는 것으로, 결과적으로 a와 b의 값이 서로 바뀌게 됩니다.

이러한 방식은 리스트의 특정 두 원소를 교환할 때에도 사용할 수 있습니다.

 

아래와 같은 입력값이 있다고 가정해 보겠습니다.

 

4
3 1
2 3
3 1
3 2

 

위 입력에 따른 작업의 순서는 다음과 같습니다.

 

box = [1, 0, 0]이므로, 처음에는 첫 번째 상자에 공이 있습니다.

 

1. 첫 번째 작업에서 x = 3, y = 1을 입력받습니다.

 

이는 3번 상자와 1번 상자의 위치를 바꾸라는 의미입니다.

 

그 결과, box = [0, 0, 1]이 됩니다. 즉, 공은 3번 상자로 이동합니다.


2. 두 번째 작업에서 x = 2, y = 3을 입력받습니다.

 

이는 2번 상자와 3번 상자의 위치를 바꾸라는 의미입니다.

 

그 결과, box = [0, 1, 0]이 됩니다. 즉, 공은 2번 상자로 이동합니다.


3. 세 번째 작업에서 x = 3, y = 1을 입력받습니다.

 

이는 3번 상자와 1번 상자의 위치를 바꾸라는 의미입니다.

 

그 결과, box = [0, 1, 0]이 됩니다. 즉, 공의 위치는 변하지 않습니다.


4. 마지막 작업에서 x = 3, y = 2을 입력받습니다. 

 

이는 3번 상자와 2번 상자의 위치를 바꾸라는 의미입니다. 

 

그 결과, box = [0, 0, 1]이 됩니다. 즉, 공은 다시 3번 상자로 이동합니다.

 

따라서 최종적인 상자의 상태는 [ 0, 0, 1 ]이 됩니다.

 

최종적으로 아래와 같은 출력값을 출력하게 됩니다.

 

3

 

 

728x90