bj2156 카드

coh·2022년 5월 25일
0

백준

목록 보기
12/27

이 문제는 Queue에 관한 문제이다. queue를 구현해서 할 수도 있지만 그냥 module에서 구현된 deque를 써서 간단하게 구현했다.
사실 stack은 list로 queue는 deque를 이용하면 더 간단하다! 속도차이가 거의 없기 때문에 굳이 새로운 자료구조를 구현할 필요가...

로직은 다음과 같다
1. for loop 돌면서 enqueue
2. card 갯수 1개 남을 때까지 while loop돌리기
3. 첫 card 버리고 2번째 card deque한 것 enqueue로 넣어주기
4. 1개 남은 card print로 출력하기

근데 아... 복붙을 잘못해서 runtime error를 몇 번 내는 건지 모르겠다.
요세푸스 문제 풀 때도 그랬는데..
collections에서 deque를 import하는 문장을 빼고 복붙을 해서 런타임 에러뜸...

from collections import deque

N = int(input())
deq = deque([])
for i in range(1, N+1):
    deq.append(i)

while len(deq) != 1:
    deq.popleft()
    deq.append(deq.popleft())

print(deq[0])

만약 Queue로 구현하려면 같은 로직으로

class Node:
    def __init__(self, data = None):
        self.data = data
        self.next = None


class Queue:
    def __init__(self):
        self.head = None
        self.tail = None
        self.size = 0

    def enqueue(self, data):
        node = Node(data)
        self.size += 1
        if self.size == 0:
            self.head = node
            self.tail = node
        else:
            self.tail.next = node
            self.tail = node

    def dequeue(self):
        if self.size == 0:
            return None
        self.size -= 1
        data = self.head.data
        self.head = self.head.next
        return data

를 이용하면 된다.

profile
Written by coh

0개의 댓글