Programmers_Greedy04 - 큰 수 만들기
프로그래머스 - 큰 수 만들기 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/parts/12077
2. 분류 및 난이도
Programmers 문제입니다.
level 2의 문제입니다.
3. 생각한 것들(문제 접근 방법)
- 처음에는 조합을 생각했습니다.
- 크기가 백만이라 일반적인 조합은 안되고 DP를 이용해서 풀어야할텐데, 방법을 찾지 못해서 당연히 틀렸습니다.
틀린 코드
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
#include <string>
#include <vector>
#include<iostream>
using namespace std;
string result = "";
void Combination(string number, string temp, int size, int index, int depth)
{
if (temp.size() == depth)
{
result = result < temp ? temp : result;
cout << result << '\n';
}
else
{
for (int i = index; i < number.size(); ++i)
{
temp[depth] = number[i];
Combination(number, temp, size, i + 1, depth + 1);
}
}
}
string solution(string number, int k) {
string answer = "";
int size = number.size() - k;
string temp;
temp.assign(size,'A');
Combination(number, temp, size, 0, 0);
answer = result;
return answer;
}
- DP로 풀겠다는 집념으로 여러가지 찾아봤으나 힘들 것 같아서 포기하고 타 블로그의 도움을 받았습니다.
4. 접근 방법을 적용한 코드
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
#include <string>
#include <vector>
#include<iostream>
using namespace std;
string solution(string number, int k) {
string answer = "";
int size = number.size() - k;
int start = 0;
for (int i = 0; i < size; ++i)
{
char MAXnum = number[start];
int MaxIdx = start;
for (int j = start; j <= i + k; ++j)
{
if (MAXnum < number[j])
{
MAXnum = number[j];
MaxIdx = j;
}
}
start = MaxIdx + 1;
answer += MAXnum;
}
return answer;
}
5. 결과
생각 한사람이 너무 대단하다고 느꼈습니다.
This post is licensed under CC BY 4.0 by the author.