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

백준 - 10810번 공 넣기 문제풀이 [Hellfer]

by Hellfer 2024. 1. 5.
728x90

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
728x90