https://programmers.co.kr/learn/courses/30/lessons/42883
[풀이] Greedy
Upperbound를 이용해서 고를 수 있는 범위 내에서 9~0까지 for문을 돌면서 가장 먼저 선택할 수 있는
값을 하나씩 고르면 된다.
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
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
string solution(string number, int k) {
string answer = "";
vector<int> a[10];
for (int j = 0; j < number.size(); j++) {
a[number[j] - '0'].push_back(j);
}
int cur = -1;
for (int i = k; i < number.size(); i++) {
for (int j = 9; j >= 0; j--) {
if (a[j].empty()) continue;
if (answer == "" && j == 0) continue;
auto ub = upper_bound(a[j].begin(), a[j].end(), cur);
if (ub == a[j].end()) continue;
int m = ub - a[j].begin();
if (a[j][m] <= i) {
answer.push_back(j + '0');
cur = a[j][m];
break;
}
}
}
return answer;
}
|
cs |
'Problem-Solving > Programmers' 카테고리의 다른 글
[프로그래머스][level2] 거리두기 확인하기 (C++) (0) | 2021.08.06 |
---|---|
[프로그래머스] Level2 - 가장 큰 수 (C++) (0) | 2020.07.28 |
[프로그래머스] Level2 - 조이스틱 (C++) (0) | 2020.07.14 |
[프로그래머스] Level2 - 더 맵게 (C++) (0) | 2020.07.07 |
[프로그래머스] Level2 - 괄호 변환 (C++) (0) | 2020.06.28 |