https://programmers.co.kr/learn/courses/30/lessons/42587
방법 1: algorithm 라이브러리 사용X
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> priorities, int location) {
vector<int> order(priorities.size());
queue<int> q;
int ordering = 0;
// 먼저 queue에 모든 인덱스 push
for (int i = 0; i < priorities.size(); i++)
{
q.push(i);
}
while (!q.empty())
{
// 전체에서 우선순위가 가장 높은 값을 가진 인덱스 찾기
// front를 계속해서 queue의 맨 뒤로 보내면서 순회
int now = q.front();
q.push(now);
q.pop();
int max = now;
while (now != q.front())
{
if (priorities[max] < priorities[q.front()])
{
max = q.front();
}
q.push(q.front());
q.pop();
}
// 현재 front에 있는 인덱스 값이 우선순위가 가장 높다면
// order벡터에 출력순서 입력
if (max == now)
{
order[now] = ordering++;
q.pop();
}
// 아니라면 queue의 맨 뒤로
else
{
q.push(now);
q.pop();
}
}
// 원하는 인덱스의 출력순서 return
return order[location] + 1;
}
Colored by Color Scripter
|
방법 2: algorithm 라이브러리 사용O
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
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
vector<int> order(priorities.size());
queue<int> q;
int ordering = 0;
// 먼저 queue에 모든 인덱스 push
for (int i = 0; i < priorities.size(); i++)
{
q.push(i);
}
while (!q.empty())
{
int now = q.front();
// 현재 front 인덱스의 값이 가장 큰 우선순위라면
if (priorities[now] == *max_element(priorities.begin(), priorities.end()))
{
order[now] = ordering++;
q.pop();
// 우선순위에서 해당 인덱스의 우선순위값 -1처리
priorities[now] = -1;
}
// 아니라면 queue의 맨 뒤로
else
{
q.push(now);
q.pop();
}
}
// 원하는 인덱스의 출력순서 return
return order[location] + 1;
}
Colored by Color Scripter
|
방법 1이 방법 2보다 쪼-금 빠르지만
가독성은 역시 방법 2가 더 확실하게 읽힌다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]스택/큐 : 탑 (level 2) (c++) (0) | 2020.04.29 |
---|---|
[프로그래머스]스택/큐 : 기능개발 (level 2) (c++) (0) | 2020.04.29 |
[프로그래머스]스택/큐 : 주식가격 (level 2) (c++) (0) | 2020.04.28 |
[프로그래머스][2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (level 1)(c++) (0) | 2020.04.28 |
[프로그래머스]해시 : 베스트앨범 (level 3) (java) (0) | 2019.12.18 |
댓글