Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 싱글턴
- 빌더 패턴
- 팩터리 메서드
- 빌더
- 동적 데커레이터
- 동적 데코레이터
- 팩터리 패턴
- 프로토타입 패턴
- 모던C++디자인패턴
- 브릿지 패턴
- 디자인패턴
- 흐름식 빌더
- 컴포지트 빌더
- 데커레이터 패턴
- 프로토타입 중복처리
- 싱글톤
- 데커레이터
- 내부 팩터리
- 브릿지
- 함수형 팩터리
- 그루비 스타일 빌더
- 싱글턴 패턴
- 컴포지트 패턴
- 디자인 패턴
- 컴포지트
- 추상 팩터리
- 팩터리
- 프로토타입
- 싱글톤 패턴
- 단순한 빌더
Archives
- Today
- Total
GGym's Practice Notes
프로그래머스 Level2_ 프린터 (C++) 본문
큐와 우선순위 큐를 사용했다.
우선순위가 9~1까지 밖에 없는 걸 생각해 9~1 순으로 우선순위 큐에서 나온 갯수만큼 저장하고 큐를 돌면서 출력하도록 하였다. 그리고 역시나 백준에 좀더 어려운 버전의 똑같은 문제가 존재했다..
[BOJ 1966 프린터 큐] : www.acmicpc.net/problem/1966
1966번: 프린터 큐
첫 줄에 test case의 수가 주어진다. 각 test case에 대해서 문서의 수 N(100이하)와 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만)이 주어진다. 다음
www.acmicpc.net
3년전에 문제를 풀어서 어떻게 풀었는지는 기억나지 않지만 queue 자료구조를 사용하지 않고 구현했었다.
프로그래머스 코드 :
#include <string> // Level2_ 프린터 [큐]
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
#define pii pair<int, int>
int solution(vector<int> priorities, int location) {
int answer = 1;
priority_queue<int> pq;
queue<pii> q;
for(int i=0; i<priorities.size();i++){
pq.push(priorities[i]);
q.push(make_pair(priorities[i], i));
}
for(int i=9; i>=1; i--){
int j=0;
while(pq.top() == i){
j++;
pq.pop();
if(pq.empty()) break;
}
for(int k=0; k<j; ){
pii s = q.front();
if(s.first != i) q.push(s);
else {
if(s.second == location) return answer;
answer++;
k++;
}
q.pop();
}
}
return answer;
}
// IO
int main(){
int n, location;
cin >> n >> location;
vector<int> priorities;
for (int i=0; i<n; i++){
int k;
cin >> k;
priorities.push_back(k);
}
cout << solution(priorities, location);
return 0;
}
백준 코드 :
#include<cstdio>
using namespace std;
int main(){
int queue[102][2];
int t;
for(scanf("%d",&t);t--;){
int n,m;
scanf("%d%d",&n,&m);
int i;
for(i=0;i<n;i++) {
scanf("%d",&queue[i][0]);
queue[i][1]=i;
}
int s=0;
while(1){
for(i=1;i<n;i++)
if(queue[0][0]<queue[i][0])break;
if(i!=n){
queue[n][0]=queue[0][0];
queue[n][1]=queue[0][1];
}
else{
s++;
n--;
if(queue[0][1]==m)break;
}
for(i=0;i<n;i++){
queue[i][0]=queue[i+1][0];
queue[i][1]=queue[i+1][1];
}
}
printf("%d\n",s);
}
}
'Algorithm' 카테고리의 다른 글
백준 1167 : 트리의 지름 (0) | 2021.04.20 |
---|---|
프로그래머스 Level2_ 수식 최대화 (C++) (0) | 2020.10.31 |
프로그래머스 Level2_ 큰 수 만들기 (C++) (0) | 2020.10.28 |
프로그래머스 Level3_ 여행경로 (C++) (0) | 2020.10.24 |
프로그래머스 Level3_ 줄 서는 방법 (C++) (0) | 2020.10.24 |