Algorithm/Data Structure
(Python) - BOJ(2346번) : 풍선 터뜨리기
하눤석
2022. 1. 30. 21:09
728x90
https://www.acmicpc.net/problem/2346
- 해설 :
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선이 있다. 각 풍선 안에는 종이가 하나 들어있고, 종이에는 -N보다 크거나 같고, N보다 작거나 같은 정수가 하나 적혀있다. 이 풍선들을 다음과 같은 규칙으로 터뜨린다.
우선, 제일 처음에는 1번 풍선을 터뜨린다. 다음에는 풍선 안에 있는 종이를 꺼내어 그 종이에 적혀있는 값만큼 이동하여 다음 풍선을 터뜨린다. 양수가 적혀 있을 경우에는 오른쪽으로, 음수가 적혀 있을 때는 왼쪽으로 이동한다. 이동할 때에는 이미 터진 풍선은 빼고 이동한다.
풍선이 터지는 순서를 출력하는 문제이다.
- 풀이 :
순환 큐를 이용하면 쉽게 풀 수 있는 문제이다. 그러나 순환 큐를 구현하는 것보다 인덱스를 순환하는 것처럼 (mod를 사용하여) 구현하면 더욱 간단하게 해결할 수 있다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
if __name__ == "__main__":
N = int(input())
balloon = list(map(int,input().split()))
answer = []
check = [0]*N
idx = 0
for i in range(N):
answer.append(idx%N+1)
check[idx%N] = 1
cnt = balloon[idx%N]
if i<N-1:
while cnt:
c = cnt
if c > 0:
idx +=1
else:
idx -=1
if check[idx%N] == 0:
if cnt>0:
cnt -= 1
else:
cnt +=1
for i in answer:
print(i,end =" ")
|
cs |
320x100