프로그래머스의 가장 큰 수(Lv2) 문제이다.


[ 문제풀이 ]

1) 주어진 수열에서 배치를 바꿔서 가장 큰 수를 찾아내야 하는 문제이다.

   본인은 정렬을 이용해서 이 문제를 접근했는데, 정렬을 할 때 단순 오름차순 / 내림차순이 아닌, 새로운 기준을

   만들어서 그 기준에 따라 정렬을 진행해 주었다.

   문자열 2개를 비교 하는데, 2개를 합쳤을 때 더 큰 문자열 순서대로 정렬이 되도록 구현하였다.

   예를 들어서, 입력 예제인 [ 6, 10, 2 ] 를 정렬한다고 가정했을 때,

   가장 먼저 '6'과 '10'을 비교를 한다고 생각해보면, 2개를 합쳐보는 것이다.

   610과, 106 2개의 값이 나올 수 있는데 610이 더 크기 때문에, 6이 더 앞에 오도록 !

   10과 2를 비교할 때, 102과 210이 나올 수 있는데, 210이 더 크기 때문에 2가 더 앞에 올 수 있도록

   6과 2를 비교할 때, 62와 26이 나올 수 있는데, 62가 더 크기 때문에 6이 더 앞에 올 수 있도록 기준을 정해주었다.

   이 후, 정렬은 sort함수를 이용해서 정렬시켜 주었다.


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<string>
#include<vector>
#include<algorithm>
 
using namespace std;
 
bool Standard(string A, string B)
{
    if (A + B > B + A) return true;
    return false;
}
 
string solution(vector<int> numbers)
{
    string Answer = "";
    vector<string> Array;
    for (int i = 0; i < numbers.size(); i++) Array.push_back(to_string(numbers[i]));
    sort(Array.begin(), Array.end(), Standard);
    for (int i = 0; i < Array.size(); i++)    Answer = Answer + Array[i];
    
    if (Answer[0== '0') Answer = "0";
    return Answer;
}
cs


+ Recent posts