Skip to content

JYP / 3월 5주차 / 3문제#11

Merged
learntosurf merged 3 commits intoAlgorithmStudy-Allumbus:mainfrom
JYP0824:main
Mar 31, 2024
Merged

JYP / 3월 5주차 / 3문제#11
learntosurf merged 3 commits intoAlgorithmStudy-Allumbus:mainfrom
JYP0824:main

Conversation

@JYP0824
Copy link
Contributor

@JYP0824 JYP0824 commented Mar 31, 2024

요세푸스 문제 0 - 문제 풀이

  • 입력 a, b를 받은 뒤 1 ~ a까지의 수를 queue에 입력한다
  • 큐의 모든 원소가 꺼내질때까지 while문을 반복하는데, b번째 사람을 제거하기 위해 큐를 b-1번 왼쪽으로 이동시킨다
  • 이후 제거된 순으로 res에 append 후 res를 출력한다
from collections import deque

queue = deque()
res = []
a, b = map(int, input().split())
for i in range(1, a+1):
    queue.append(i)

while queue:
    for i in range(b-1):
        queue.append(queue.popleft())
    res.append(queue.popleft())

print("<",end='')
for i in range(len(res)-1):
    print("%d, "% res[i], end='')
print(res[-1], end='')
print(">")

풍선 터뜨리기 - 문제 풀이

  • 자료구조 deque를 이용
  • 값이 양수인 경우 시계 방향으로 이동하며, 음수인 경우에는 절대값만큼 시계 반대 방향으로 이동한다
  • 풍선의 갯수 (n)을 전달받은 후 for문을 통해 n번 반복하게 된다
  • for문이 반복되는 동안 popleft를 통해 deque 내부의 가장 왼쪽 원소(터뜨릴 풍선) 및 인덱스를 가져온 뒤, 해당 원소의 값에 따라 회전을 진행하며 풍선을 터뜨린다
  • 이후 풍선이 터진 순서대로 출력한다
from collections import deque
import sys

n = int(sys.stdin.readline())
deque = deque(enumerate(map(int, sys.stdin.readline().split()), start=1))

for _ in range(n):
	x = deque.popleft()
	print(x[0], end=' ')
	if x[1] > 0:
		deque.rotate(-(x[1] - 1))
	else:
		deque.rotate(-x[1])

@learntosurf learntosurf changed the title JYP / 3월 4주차 / 3문제 JYP / 3월 5주차 / 3문제 Mar 31, 2024
@learntosurf learntosurf merged commit 01ef267 into AlgorithmStudy-Allumbus:main Mar 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants