728x90
처음 제출한 틀린 코드)
import sys
from collections import deque
n = int(sys.stdin.readline())
ballon, number = deque(list(map(int, sys.stdin.readline().split()))), list(range(1, n+1))
res = []
while True:
num = ballon.popleft()
res.append(number.pop(0))
if len(number) == 0:
break
if num > 0:
for _ in range(num-1):
ballon.append(ballon.popleft())
number.append(number.pop(0))
else:
for _ in range(abs(num)):
ballon.append(ballon.popleft())
number.append(number.pop(0))
print(*res)
1966번 : 프린터 큐처럼 해결하려고 했다.
빼주는 원소가 항상 인덱스 0번이어야 한다는 점과 num이 양수일때는 num-1번 반복, 음수일때는 num번 반복 해야한다는 아이디어는 맞았고 테스트 케이스는 통과했지만 다른 부분에서 틀린것 같다.
인덱스를 출력해야 한다는 점과 num의 부호에 따라 넘겨주는 방향이 다르다는것을 파이썬에서는 내장함수를 이용해서 해결할 수 있는데 해설코드를 찾아보고서 알았다.
enumerate함수, rotate사용법
정답 코드)
import sys
from collections import deque
n = int(sys.stdin.readline())
q = deque(enumerate(map(int, sys.stdin.readline().split()))) #1
res = []
while q:
idx, num = q.popleft() #2
res.append(idx+1) #3
if num > 0: #4
q.rotate(-1*(num-1))
elif num < 0: #5
q.rotate(abs(num))
print(*res)
#1 : enumerate도 튜플로 만들어 주는 연속적인 객체이니까 deque()안에 삽입 가능
#2 : 원하는 값을 항상 인덱스 0번에서 빼는것으로 구현하므로 인덱스와 값을 popleft()
#3 : 각 인덱스를 문제에 맞게 삽입
#4 : num이 양수일때 popleft에 의해 재정렬된 리스트를 rotate를 이용해 왼쪽 원소를 오른쪽으로 삽입
횟수는 양수일때는 num-1번만큼 반복
#5 : num이 음수일때는 popleft에 의해 재정렬된 리스트를 rotate를 이용해 오른쪽 원소를 왼쪽으로 삽입
음수일때는 num번만큼 반복
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 9663 파이썬(python) : N-Queen - (★) (0) | 2022.08.27 |
---|---|
[백준] 14889 파이썬(python) : 스타트와 링크 - (★) (0) | 2022.08.25 |
[백준] 3190 파이썬(python) : 뱀 - (★) (0) | 2022.08.22 |
[백준] 11652 파이썬(python) : 카드 (0) | 2022.08.21 |
[백준] 13335 파이썬(python) : 트럭 - (★) (0) | 2022.08.20 |