앞에서 나가고 뒤로 들어오길래
음 큐 쓰면 되겠다 했다.
import sys
N=int(sys.stdin.readline())
q=[]
for i in range(1, N+1):
q.append(i)
while len(q)>1:
q.pop(0)
temp=q.pop(0)
q.append(temp)
print(q[0])
append 저 모냥으로 해도 되나? 했는데
그것도 그렇고 list도 그렇고 시간 초과
일단 저 append는
N= int(input())
q = list(range(1, N+1))
로 하면 훨씬 간단하다.
그리고 보통 이런 문제에선 import deque쓰지 않나? 근데 앞뒤에서 양방향 출입은 필요 없는데 꼭 그래야 하나? 고민했다.
찾아보니 데크는 양 끝 요소의 append와 pop이 압도적으로 빠르다고 한다.
양끝 요소에 접근하여 삽입 또는 제거 동작을 할 때,
일반적인 리스트는 O(n) 소요. 그에 반해 데크(deque)는 O(1)만 걸린다. 시간 면에서 데크가 압도적 효율을 자랑한다.
그래서 deque를 이용한 풀이는
from collections import deque
n = deque(range(1, int(input())+1,))
while len(n) != 1:
n.popleft()
n.rotate(-1)
print(n[0])
rotate를 사용하면 원소 회전 가능.
deque.rotate(1) 이러면 deque의 원소를 오른쪽으로 한바퀴 돌린다.
deque.rotate(2)면 오른쪽으로 두바퀴.
-1을 넣으면 왼쪽으로 한바퀴.
'CS > 알고리즘' 카테고리의 다른 글
★ 백준 20920 파이썬 영단어 암기는 어려워- 딕셔너리&람다식 응용 (0) | 2024.07.07 |
---|---|
백준 파이썬 13305번 주유소 - 간단한 풀이 (0) | 2024.07.07 |
백준 17266번 파이썬 어두운 굴다리 (0) | 2024.07.06 |
백준 1205번 파이썬 풀이: 등수 구하기 (0) | 2024.07.04 |
백준 20125번 파이썬 : 쿠키의 신체 측정 (0) | 2024.07.04 |