https://www.acmicpc.net/problem/10810
10810번: 공 넣기
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이
www.acmicpc.net
🔷 알고리즘 분류 - 구현, 시뮬레이션 난이도 - 브론즈 3
시뮬레이션을 구현할 때는 일반적으로 다음과 같은 과정을 거칩니다.
1. 문제 정의: 시뮬레이션의 목적을 명확히 정의합니다.
이는 어떤 시스템을 모사할 것인지, 어떤 변수를 고려할 것인지, 어떤 결과를 얻고자 하는지 등을 포함합니다.
2. 모델 설계: 시뮬레이션의 규칙과 로직을 설계합니다.
이는 시스템의 동작 방식, 각 변수의 역할, 시간 경과에 따른 변화 등을 포함합니다.
3. 코드 구현: 설계한 모델을 파이썬 코드로 구현합니다. 이는 변수 초기화, 로직 구현, 결과 출력 등을 포함합니다.
시뮬레이션 실행 및 분석: 구현한 코드를 실행하여 결과를 얻고, 이를 분석합니다.
4. 시나리오 변경 및 반복: 필요에 따라 변수를 변경하거나, 로직을 수정하면서 시뮬레이션을 반복합니다.
이를 통해 다양한 시나리오를 테스트하고, 최적의 전략을 찾을 수 있습니다.
🔶문제 풀이 - 시뮬레이션을 이용한 풀이
# n과 m을 입력 받습니다. n은 상자의 개수, m은 공을 넣는 작업의 횟수입니다.
n, m = map(int, input().split())
# n개의 상자를 생성합니다. 처음에는 모든 상자가 비어 있으므로 0으로 초기화합니다.
box = [0]*n
# m번 공을 넣는 작업을 수행합니다.
for _ in range(m):
# 공을 넣을 상자의 범위 x, y와 넣을 공의 번호 z를 입력 받습니다.
x, y, z = map(int, input().split())
# x와 y는 상자의 번호이므로, 이를 인덱스로 사용하기 위해 1을 빼줍니다.
# x에서 y까지의 상자에 z번 공을 넣습니다.
for i in range(x-1, y):
box[i] = z
# 모든 공을 넣은 후 각 상자에 어떤 공이 들어 있는지 출력합니다.
# 각 상자에 들어 있는 공의 번호를 공백으로 구분해 출력합니다.
print(' '.join(map(str, box)))
🔶문제 이해하기
아래와 같은 입력이 주어졌다고 가정해 보겠습니다.
5 4
1 2 3
3 4 4
1 4 1
2 2 2
위 입력에 따른 작업의 순서는 다음과 같습니다.
1. 첫 번째 작업에서는 1번 상자부터 2번 상자까지 3번 공을 넣습니다.
따라서 상자의 상태는 [3, 3, 0, 0, 0]이 됩니다.
2. 두 번째 작업에서는 3번 상자부터 4번 상자까지 4번 공을 넣습니다.
따라서 상자의 상태는 [3, 3, 4, 4, 0]이 됩니다.
3. 세 번째 작업에서는 1번 상자부터 4번 상자까지 1번 공을 넣습니다.
이 작업 후 상자의 상태는 [1, 1, 1, 1, 0]이 됩니다.
4. 마지막 작업에서는 2번 상자에 2번 공을 넣습니다.
따라서 최종적인 상자의 상태는 [1, 2, 1, 1, 0]이 됩니다.
1 2 1 1 0
'백준 알고리즘' 카테고리의 다른 글
백준 - 1916번 최소비용 구하기 문제풀이 [Hellfer] (0) | 2024.01.09 |
---|---|
백준 - 1753번 최단경로 문제풀이 [Hellfer] (2) | 2024.01.08 |
백준 - 1547번 바구니 뒤집기 문제풀이 [Hellfer] (0) | 2024.01.07 |
백준 - 10813번 공 바꾸기 문제풀이 [Hellfer] (2) | 2024.01.06 |
백준 - 14938번 서강드라운드 문제풀이 [Hellfer] (2) | 2023.12.30 |
백준 - 2458번 키 순서 문제풀이 [Hellfer] (2) | 2023.12.29 |
백준 - 1389번 케빈 베이컨의 6단계 법칙 문제풀이 [Hellfer] (0) | 2023.12.28 |
백준 - 2217번 로프 python 문제풀이 [Hellfer] (0) | 2023.12.26 |