[백준]1966번 프린터 큐 - 큐

2021. 1. 18. 18:55·SW개발/코딩테스트

 

from collections import deque

n = int(input())

for i in range(n):
    queue = deque([])
    num, wh = map(int, input().split())
    temp = (list(map(int, input().split())))
    for i in range(len(temp)):
        queue.append(temp[i])

    temp[wh] = 'answer'
    cnt = 0
    while True:
        if queue[0] == max(queue): # 큐의 맨 앞자리가 우선순위가 제일 높은 경우
            cnt = cnt + 1 # 카운트
            if temp[0] == 'answer': # 지정한 인덱스가 맞을 경우
                print(cnt) # 출력
                break
            else: # 우선순위는 제일 높지만, 지정한 인덱스가 아닐 경우
                queue.popleft() # 제일 높은 우선순위이기 때문에 큐에서 삭제만 해도 됨 (뒤로 넣을 필요x)
                temp.pop(0)
        else: # 우선순위가 낮으므로, 큐의 맨 뒤로 이동
            queue.append(queue.popleft())
            temp.append(temp.pop(0))

 

코드 설명

문서의 개수를 num, 궁금한 위치를 wh 변수에 입력받아 저장한다. 그 후 temp 리스트에 문서의 중요도를 저장한다. 문서의 개수만큼 반복하여 문서의 중요도를 큐에 초기화 시켜준다. temp 리스트의 궁금한 위치의 원소는 'answer' 로 바꾼다.

반복문을 진행하면서 큐의 맨 앞에 존재한 원소가 우선순위가 가장 높을 경우에는 카운트를 해주고, 그 문서가 'answer' 라면 출력하고 끝마친다. 그렇지 않다면 큐와 temp 리스트에서 원소를 삭제한다.

만약 우선순위가 제일 높지 않을 경우에는 원소를 뽑아 큐의 뒤로 보낸다.

 

Point: 처음에는 우선순위 큐(Priority Queue)를 사용하였으나 뒤로 보내는 문제가 발생하여 일반적인 큐로 해결하였다.

우선순위가 제일 높은 숫자일 때, 그것이 궁금한 문서라면 카운트 수를 출력, 아니라면 큐에서 제거한다.

우선순위가 제일 높지 않을 경우, 큐의 뒤로보내 우선순위를 맨 뒤로 만든다.

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[백준]1021번 회전하는 큐 - 덱  (0) 2021.01.24
[백준]10866번 덱 - 덱  (0) 2021.01.23
[백준]11866번 요세푸스 문제 0 - 큐  (0) 2021.01.17
[백준]2164번 카드 2 - 큐  (0) 2021.01.16
[백준]18258번 큐 2 - 큐  (0) 2021.01.15
'SW개발/코딩테스트' 카테고리의 다른 글
  • [백준]1021번 회전하는 큐 - 덱
  • [백준]10866번 덱 - 덱
  • [백준]11866번 요세푸스 문제 0 - 큐
  • [백준]2164번 카드 2 - 큐
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    라이프 스타일
    배달비 공유
    어플리케이션
    트리 #AVL #알고리즘 #자료구조
    오픈소스
    컨트리뷰터
    Contributor
    django
    배공파용
    배달
    플레이스토어
    g
    음식
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[백준]1966번 프린터 큐 - 큐
상단으로

티스토리툴바