코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[큐/Python] 2164번: 카드2 - 효과는 굉장했다!

bluetag_boy 2022. 2. 11. 21:22
반응형
 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

알고리즘 분류

  • 자료 구조

 

 

SOLUTION

import sys
from collections import deque

N = int(sys.stdin.readline())
deque =  deque([i for i in range(1,N+1)]) 

while(len(deque) > 1):
    deque.popleft() # 카드에서 가장위에 있는 수 버림
    deque.rotate(-1) # rotate()함수를 이용해 deque안에 있는 값들을 왼쪽으로 한칸씩 이동 0번째 인덱스에 있는 값은 가장 마지막 인덱스로 이동

print(deque[0])

※ pop(0) vs popleft()

 사실 기능적인 측면으로만 봤을 때 둘의 기능은 같다.

그러나 시간복잡도를 비교 해보면 pop(0)의 시간복잡도는 O(N) 이고 popleft()의 시간복잡도는 O(1)이기 때문에, deque의 popleft()를 쓰는게 더 효율적인 코드라고 볼 수 있다.

 

※ collections.deque

 

collections — Container datatypes — Python 3.10.0 documentation

collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() factory f

docs.python.org