[python] 백준 2346번

도덩이의 개발 일지·2024년 9월 29일

백준

목록 보기
105/131
post-thumbnail

안녕하세요 !

오늘은 백준 - 풍선 터뜨리기 문제를 가져왔습니다.


문제 설명


해결 방법

문제를 해결한 방법은 다음과 같습니다.

  1. 입력을 받아주고 풍선을 만들어줍니다.
  2. 반복문을 수행하며 풍선의 순서를 출력합니다.
  3. 풍선 안 종이에 적힌 숫자를 저장하고 풍선을 터뜨립니다.
  4. 풍선을 다 터뜨렸을 때 반복문을 멈추는 종료 조건을 만들어줍니다.
  5. 풍선을 이동합니다.

  1. 입력을 받아주고 풍선을 만들어줍니다.
n = int(sys.stdin.readline().strip())
arr = list(map(int, sys.stdin.readline().strip().split()))
num = []
for i in range(n):
    num.append(i+1)

  1. 반복문을 수행하며 풍선의 순서를 출력합니다.
p = 0
for i in range(n):
    print(num[p], end = " ")

  1. 풍선 안 종이에 적힌 숫자를 저장하고 풍선을 터뜨립니다.

이때, 풍선의 순서가 담긴 배열에서도 똑같이 pop을 해줍니다.

    next = arr[p]
    arr.pop(p)
    num.pop(p)

  1. 풍선을 다 터뜨렸을 때 반복문을 멈추는 종료 조건을 만들어줍니다.
    if len(arr) == 0:
        break

  1. 풍선을 이동합니다.

테스트케이스로 하나하나 수행하다보면 종이에 적힌 숫자가 0보다 크면 실제 적힌 숫자보다 -1만큼 이동하고 종이에 적힌 숫자가 0보다 작으면 실제 적힌 숫자만큼 이동한다는 규칙을 알 수 있습니다.

    if next > 0:
        p = (p + next -1) % len(arr)
    else:
        p = (p + next) % len(arr)

전체 코드

import sys

n = int(sys.stdin.readline().strip())
arr = list(map(int, sys.stdin.readline().strip().split()))

num = []
for i in range(n):
    num.append(i+1)

p = 0
for i in range(n):
    print(num[p], end = " ")
    next = arr[p]
    arr.pop(p)
    num.pop(p)
    if len(arr) == 0:
        break
    if next > 0:
        p = (p + next -1) % len(arr)
    else:
        p = (p + next) % len(arr)
profile
말하는 감자에서 개발자로 ( ´͈ ᵕ `͈ )◞♡

0개의 댓글