백준-2346 풍선 터뜨리기

Yeom Jae Seon·2021년 1월 25일
0

알고리즘

목록 보기
6/19
post-thumbnail

백준-2346 풍선 터뜨리기

이 문제는 요세푸스 문제와 비슷하게 리스트를 원으로 구현해야하는 문제이다.
나는 리스트를 원으로 구현할때 무한루프 내에서 1씩증시키며 찾아갔다.
이문제도 요세푸스처럼 %연산을 통해서 해결해보자.

  • 통과는 했지만 불만족스러운 코드 😅
N = int(input())
arr = list(map(int, input().split()))

count = 0
currentRemoveNum = 1
nextRemoveNum = arr[0]
while True:
  arr[currentRemoveNum - 1] = False
  count += 1
  print(currentRemoveNum, end=' ')
  if count == len(arr):
    break
  if nextRemoveNum < 0:
    nextRemoveNum = abs(nextRemoveNum)
    while nextRemoveNum != 0:
      if currentRemoveNum - 1 == 0:
        currentRemoveNum = len(arr)
      else:
        currentRemoveNum -= 1
      if arr[currentRemoveNum - 1] != False:
        nextRemoveNum -= 1

  else:
    while nextRemoveNum != 0:
      if currentRemoveNum - 1 == len(arr) - 1:
        currentRemoveNum = 1
      else:
        currentRemoveNum += 1
      if arr[currentRemoveNum - 1] != False:
        nextRemoveNum -= 1

  nextRemoveNum = arr[currentRemoveNum - 1]
  • solution 😀
N = int(input())
arr = list(map(int, input().split()))

ballonNum = [i for i in range(1, N + 1)]
resultArr = []
idx = 0

K = arr.pop(idx)
resultArr.append(ballonNum.pop(idx))

while len(arr) > 0:
  if K > 0:
    idx = (idx + (K - 1)) % len(arr)
  else:
    K = K * -1
    idx = len(arr) - idx - 1
    idx = len(arr) - ((idx + (K)) % len(arr)) - 1
  K = arr.pop(idx)
  resultArr.append(ballonNum.pop(idx))

for i in range(0, len(resultArr)):
  print(resultArr[i], end=' ')

충분히 할수 있는 수준이였다.
index를 저장하는 ballonNum배열과 진짜 데이터가있는 arr배열 두개를 이용했다.

K > 0 일때와 K < 0일때를 둘다 요세푸스와 같이 % 연산을 이용해서 풀었다.
헤맸던 부분은 idx가 바뀌어도 %를 이용하면 상관없는데 이부분이 헷갈렸다. 그리고 arr이 하나씩 줄어드는데 인덱스와 연관시키기가 어려웠다.
JS였으면 배열내 오브젝트를 통해서 풀었을거 같다.

0개의 댓글