백준-2346 풍선 터뜨리기
백준-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였으면 배열내 오브젝트를 통해서 풀었을거 같다.
Author And Source
이 문제에 관하여(백준-2346 풍선 터뜨리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yjs3819/백준-2346-풍선-터트리기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)