https://www.acmicpc.net/problem/1138
N번째 사람부터 놓기 시작하면, 현재의 상황만 보고 순서를 고려하면 된다.(그리디)
i번째를 놓을 때, i + 1번째부터 N까지 놓아졌다면 모든 수는 i보다 크므로, 아래의 코드를 작성할 수 있다.
해설코드(C++).
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
|
#include <iostream>
#include <vector>
using namespace std;
int N;
int val;
vector<int> v;
vector<int> result;
int main() {
cin >> N;
for(int i = 1; i <= N; i++){
cin >> val;
v.push_back(val);
}
for(int i = v.size() - 1; i >= 0; i--){
int val = v[i];
vector<int>::iterator it;
for(it = result.begin(); it != result.end(); it++){
if(val == 0){
break;
}else
val -= 1;
}
result.insert(it, i + 1);
}
for(int i = 0; i < result.size(); i++){
cout << result[i] << " ";
}
cout << endl;
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 2437] 저울(C++, 자세한 설명) (0) | 2020.07.11 |
---|---|
[BOJ 1783] 병든 나이트(C++) (0) | 2020.07.10 |
[BOJ 2624] 동전 바꿔주기(C++, 다이나믹 프로그래밍) (0) | 2020.06.27 |
[BOJ 1072] 게임(C++) (0) | 2020.06.20 |
[BOJ 1080] 행렬(C++) (0) | 2020.06.20 |