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
'백준 알고리즘' 카테고리의 다른 글
백준 - 14719번 빗물 python 문제풀이 [Hellfer] (0) | 2024.01.15 |
---|---|
백준 - 14716번 현수막 python 문제풀이 [Hellfer] (2) | 2024.01.13 |
백준 - 1916번 최소비용 구하기 문제풀이 [Hellfer] (0) | 2024.01.09 |
백준 - 1753번 최단경로 문제풀이 [Hellfer] (2) | 2024.01.08 |
백준 - 10813번 공 바꾸기 문제풀이 [Hellfer] (2) | 2024.01.06 |
백준 - 10810번 공 넣기 문제풀이 [Hellfer] (2) | 2024.01.05 |
백준 - 14938번 서강드라운드 문제풀이 [Hellfer] (2) | 2023.12.30 |
백준 - 2458번 키 순서 문제풀이 [Hellfer] (2) | 2023.12.29 |