본문 바로가기

Study/Programmers

프로그래머스 - 가장 큰 수

쉽다고 생각하였으나 정렬을 쉽게하는 방법을 떠올리지 못해서 시간이 오래 걸렸던 문제이다. 

두 문자열을 붙였을 때 그 순서에 따라 더 큰 숫자가 되게끔 정렬을 해줘야 하는데, 이를 각 숫자로 판단하기에는 어렵다.

따라서 정렬 기준 내에서 두 문자열을 미리 붙여보고 더 큰 문자열이 앞에 오도록 정렬하였더니 쉽게 해결이 되었다. 

다만, 문제는 "가장 큰 수"를 의미하기 때문에 [0, 0, 0, 0]이 들어올 경우 0을 출력해야한다는 점을 주의해야 한다. 

 

코드

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
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> v;
 
bool comp(string a, string b)
{
    string tmp1 = a;
    string tmp2 = b;
    tmp1.append(b);
    tmp2.append(a);
    for(int i=0; i<a.size() + b.size(); i++)
    {
        if (tmp1[i] != tmp2[i])
            return tmp1[i] > tmp2[i];
    }
    return (0);
}
 
string solution(vector<int> numbers) {
    if (numbers.size() == 0)
        return ("");
    else if (numbers.size() == 1)
        return to_string(numbers[0]);
    for(int i=0; i<numbers.size(); i++)
    {
        v.push_back(to_string(numbers[i]));
    }
    sort(v.begin(), v.end(), comp);
    string answer = "";
    for(int i=0; i<v.size(); i++)
        answer.append(v[i]);
    for(int i=0; i<answer.size(); i++)
    {
        if (answer[i] != '0')
            return answer;
    }
    return "0";
}
cs

 

'Study > Programmers' 카테고리의 다른 글

프로그래머스 - 섬 연결하기  (0) 2021.04.14
프로그래머스 - 여행 경로  (0) 2021.04.14
프로그래머스 - 단어 변환  (0) 2021.04.13
프로그래머스 - 타겟 넘버  (0) 2021.04.13
프로그래머스 - 소수 찾기  (0) 2021.04.13