katte
개발새발 우주정복기
katte
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • 블로그 소개 (1)
    • Computer (36)
      • 자료구조 (0)
      • 알고리즘&백준 (19)
      • 컴퓨터구조 (0)
      • C++ (17)
      • Kotlin (0)
    • EE (29)
      • Verilog (22)
      • 디지털 시스템 (2)
      • 집적회로설계 (1)
      • 임베디드 시스템 (4)
    • 토이프로젝트 (3)
    • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Get
  • 스트림
  • C언어
  • cin
  • C++ 스트림 클래스
  • C++ 스트림 개요
  • 표준스트림
  • 배열포인터
  • for 루프
  • ignore
  • C++11
  • c++ 입출력
  • 함수포인터
  • ctime
  • c++
  • EOF
  • 입력버퍼
  • cctype

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
katte

개발새발 우주정복기

Computer/알고리즘&백준

[백준][C++] 1966 프린터 큐

2022. 12. 7. 17:04

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

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

 

 

우선순위 큐를 사용하면 간단하게 풀 수 있다.  

 

 

#include <iostream>
#include <queue>

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
    
	int test;
	std::cin >> test;
	while (test--)
	{
		int n, m;
		std::cin >> n >> m; //n은 전체 문서의 개수, m은 원하는 문서의 순서

		std::priority_queue<int> prQue; //우선순위 큐
		std::queue<std::pair<int, int>> que;
		std::pair<int, int> pair;
		for (int i = 0; i < n; ++i)
		{
			std::cin >> pair.first; //중요도
			pair.second = i; //삽입 순서
			que.push(pair);
			prQue.push(pair.first); //우선순위 큐에는 중요도를 넣어줌
		}
		int i = 0;
		while (1)
		{
        	//우선순위 큐의 첫번째(가장 높은 중요도)가 큐의 첫번째와 같으면 인쇄
			if (que.front().first == prQue.top())
			{
				++i;
				if (que.front().second == m) break; //우리가 원하는 문서이면 break
				que.pop();
				prQue.pop();
			}
			else //그렇지 않다면 뒤로 넣는다
			{
				que.push(que.front());
				que.pop();
			}
		}
		std::cout << i << "\n";
	}
}

 

 

백준 풀면서 내가 먼저 정답 맞추기 전에 다른 사람 코드 참고한 적 거의 없는데 이 문제는 모르겠어서 좀 참고해서 풀었음.

 

자신보다 더 높은 중요도의 문서가 존재하는지의 여부를 따지기 위해, 우선순위 큐를 따로 만들어서 중요도를 저장한 후 비교한다는 것이 포인트인 듯

 

저작자표시 (새창열림)

'Computer > 알고리즘&백준' 카테고리의 다른 글

[백준][C++][DP] 10844 쉬운 계단 수  (0) 2022.12.20
[알고리즘] 정렬 알고리즘 - 선택 정렬, 힙 정렬, 병합 정렬, 퀵 정렬  (0) 2022.12.13
[백준][C++] 백준 시간 초과날 때  (0) 2022.12.02
[백준][C++] 요세푸스 문제 0  (0) 2022.12.01
[백준][C++] 1874 스택 수열  (0) 2022.11.29
    'Computer/알고리즘&백준' 카테고리의 다른 글
    • [백준][C++][DP] 10844 쉬운 계단 수
    • [알고리즘] 정렬 알고리즘 - 선택 정렬, 힙 정렬, 병합 정렬, 퀵 정렬
    • [백준][C++] 백준 시간 초과날 때
    • [백준][C++] 요세푸스 문제 0
    katte
    katte
    개발새발 코딩하는 블로그 / HW 위주

    티스토리툴바