
문제를 살펴보면 11866 요세푸스 0 과 비슷한듯 다르다
이번에는 본래의 리스트에서의 인덱스 위치도 필요하기때문에 고민을 하다가
딕셔너리를 활용하여 풍선의 번호와 풍선에 있는 종이의 번호를 함께 저장하여 활용하였다
또한 유의할 점이 있는데 11866 문제를 풀 때 처럼 rotate()의 수를 그대로 넣으면 안 된다
왜냐하면 popleft()를 하는 순간 이미 인덱스 이동이 한 번 이루어진것과 다름이 없기 때문이다
이를 참고하여 음수인 경우와 양수인 경우를 따로 생각해주어야한다
rotate()함수는 양수일 경우 오른쪽으로 회전, 음수일 경우 왼쪽으로 회전하게 되는데
문제에서는 이동 방향을 알려주었기 때문에 양수일 경우에는 음수의 값이 들어가야하고
음수일 경우에는 양수의 값이 들어가야 문제의 의도와 맞게 인덱스 이동이 가능하다
import sys
from collections import deque
n = int(input())
balloon = deque(map(int, sys.stdin.readline().split()))
idx = {}
for i in range(1, n + 1):
idx[balloon[i-1]] = i
for _ in range(n):
s = balloon.popleft()
print(idx[s], end = ' ')
if s > 0:
balloon.rotate(-(s - 1))
else:
balloon.rotate(-s)
이는 모든 조건을 확인하여 야심차게 도전한 코드이다
그러나 틀렸습니다 라는 문구를 보게 되었다
분명 예제는 제대로 나왔는데 오타가 난 부분이 있는가 싶어 이리저리 수정하며 삽질을 좀 하였다
결국 일단 둔 채로 다른 할 일을 하고 다시 보다보니 오류가 생길만한 부분이 생각났다
바로 풍선의 종이의 번호가 같은 경우이다 만약 같다면 딕셔너리에 오류가 발생한다
마지막에 입력한 값으로 덮어씌워지기 때문에 원래의 의도와 달라지게 된다
그러므로 파이썬에서 제공해주는 enumerate()를 활용하여 값을 할당해주어야한다
import sys
from collections import deque
n = int(input())
balloon = deque(enumerate(map(int, sys.stdin.readline().split())))
for _ in range(n):
idx, num = balloon.popleft()
print(idx + 1, end = ' ')
if num > 0:
balloon.rotate(-(num - 1))
else:
balloon.rotate(-num)

많은 삽질 후 얻은 귀한 정답이다
'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 10872 팩토리얼(브론즈 3) - Python (0) | 2024.12.04 |
|---|---|
| [Baekjoon]백준 24511 queuestack(실버 3) - Python (0) | 2024.12.03 |
| [Baekjoon]백준 28279 덱 2(실버 4) - Python (0) | 2024.12.01 |
| [Baekjoon]백준 11866 요세푸스 문제 0(실버 4) - Python (0) | 2024.11.30 |
| [Baekjoon]백준 2164 카드 2(실버 4) - Python (1) | 2024.11.29 |