티스토리 뷰

728x90

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

 

2346번: 풍선 터뜨리기

1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선

www.acmicpc.net


  • 해설 : 

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
댓글
© 2022 WonSeok, All rights reserved