Baekjoon

Baekjoon 1966번 프린터 큐

ppwag 2020. 7. 20. 15:11

문제

https://www.acmicpc.net/problem/1966

걸린 시간

02 : 04 : 17

풀이

Python3

class Node:
    def __init__(self, item, flag):
        self.item = item
        self.flag = flag 
        self.link = None

class Queue:
    def __init__(self):
        self.front = None
        self.rear = None
        self.search = None

    def empty(self):
        self.front = None
        self.rear = None
        self.search = None

    def is_empty(self):
        return self.front == None

    def enqueue(self, item, flag):
        temp = Node(item, flag)
        if self.is_empty():
            self.front = temp
            self.rear = temp
        else:
             self.rear.link = temp
             self.rear = temp

    def dequeue(self):
        temp = self.front

        if self.is_empty():
            print("error")
        else:
            item = temp.item
            flag = temp.flag
            self.front = temp.link

            if self.front == None:
                self.rear = None

            return item

    def _front_(self):
        if self.is_empty():
            print("error")
        else:
             return self.front.item

    def is_mark(self):
        if self.is_empty():
            print("error")
        else:
             return self.front.flag

    def is_high(self, data):
        if self.is_empty():
            print("error")
        else:
            self.search = self.front

            while self.search.link != None:
                # 맨 앞의 데이터가 뒤의 것들보다 우선순위가 낮다면
                self.search = self.search.link

                if data < self.search.item: 
                    return True

            return False

if __name__ == "__main__":
    # test case 
    T = int(input())    

    # 큐 선언
    q = Queue()

    # 결과 저장
    result = []

    for j in range(0, T):
        # 출력 횟수
        count = 0

        # 문서의 수, 몇 번째로 인쇄되었는지 궁금한 문서 위치
        N, M = map(int, input().split())

        # N개 문서의 중요도를 입력받음
        docu = list(map(int, input().split()))

        for i in range(0, N):
            # 궁금한 문서 위치를 큐에 삽입할 경우
            if i == M:
                q.enqueue(docu[i], True)    
            else:
                q.enqueue(docu[i], False)

        # 큐가 비어있을 때 까지 반복하되
        while not q.is_empty():
            if q.is_high(q._front_()) == True:
                flag = q.is_mark()
                q.enqueue(q.dequeue(), flag)
            else:
                count += 1
                # 궁금한 문서가 나오면 break
                if q.is_mark() == True:
                    q.dequeue()
                    break
                else:
                    q.dequeue()

        q.empty()
        result.append(count)

    for i in result:
        print(i)

입력을 받아오는 부분의 괄호 하나를 닫지 않아 발생한 SyntaxError 때문에 시간을 한참 보냈다. 오타가 발생한 지점을 정확히 알려주지 않고 자꾸만 다른 멀쩡한 구문에서 문제가 있다고 경고한다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 4949번 균형잡힌 세상  (0) 2020.07.21
Baekjoon 11866번 요세푸스 문제 0  (0) 2020.07.21
Baekjoon 1874번 스택 수열  (0) 2020.07.20
Baekjoon 1002번 터렛  (0) 2020.07.20
Baekjoon 10848번 큐  (0) 2020.07.19

댓글