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 | 31 |
Tags
- 코드 리뷰
- 백준
- Level 4
- DFS
- 프로그래머스
- c++
- SWEA
- 월간 코드 챌린지
- Gold 5
- Level 2
- 그리디
- Level 3
- 2019 KAKAO BLIND
- 백트래킹
- 삼성 SW 역량 테스트
- 2020 카카오 인턴십
- next_permutation
- 구현
- 2020 KAKAO BLIND
- level 1
- BFS
- 스택/큐
- Gold 4
- pass
- 시뮬레이션
- Web
- 부스트코스
- 코드리뷰
- DP
- 브루트포스
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][스택/큐][C++] 프린터 본문
문제
프로그래머스 스택/큐 - 프린터 (Level 2)
문제 풀이
접근 방식
대기 목록의 문서의 중요도와 요청 문서의 위치가 주어질 때,
요청 문서가 몇 번째로 인쇄되는 지를 구하는 문제이다.
우선 큐에 탐색할 인덱스를 저장해주었다. (0 ~ 문서의 개수 - 1)
그 후, algorithm 헤더에 있는 max_element를 사용하여 가장 높은 우선순위를 찾아주었고,
while문에서 큐를 사용하여 우선순위에 따라 인쇄를 수행하였다.
큐의 front에 있는 인덱스(now)의 우선순위가 가장 높은 우선순위인 경우에는
인쇄한 문서의 개수를 의미하는 answer의 개수를 증가시켜 주었고,
now의 우선순위를 0으로 바꿔주고, 다음으로 높은 우선순위를 찾아주었다.
now가 찾고자 하는 문서(location)인 경우에는 바로 answer을 리턴해주었다.
그렇지 않은 경우에는 인쇄를 완료한 문서이므로 큐에서 pop 연산을 수행해주었다.
가장 높은 우선순위가 아닌 경우에는 now를 큐에 push 해준 뒤, pop을 수행해주었다.
풀이 코드 - C++
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
// 큐에 인덱스 저장
queue<int> q;
int len = priorities.size();
for(int i = 0; i < len; i++) {
q.push(i);
}
// 우선순위에 따라 인쇄 수행
int answer = 0;
int MAX = *max_element(priorities.begin(), priorities.end());
int now;
while(1){
now = q.front();
if(priorities[now] == MAX){
answer++;
priorities[now] = 0;
MAX = *max_element(priorities.begin(), priorities.end());
if(now == location)
return answer;
else
q.pop();
}
else {
q.push(now);
q.pop();
}
}
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][힙][C++] 더 맵게 (0) | 2020.10.28 |
---|---|
[프로그래머스][해시][C++] 베스트앨범 (0) | 2020.10.26 |
[프로그래머스][스택/큐][C++] 주식가격 (0) | 2020.10.21 |
[프로그래머스][Summer/Winter Coding(~2018)][C++] 스킬트리 (0) | 2020.10.19 |
[프로그래머스][그리디][C++] 섬 연결하기 (0) | 2020.10.09 |
Comments