쉽다고 생각하였으나 정렬을 쉽게하는 방법을 떠올리지 못해서 시간이 오래 걸렸던 문제이다.
두 문자열을 붙였을 때 그 순서에 따라 더 큰 숫자가 되게끔 정렬을 해줘야 하는데, 이를 각 숫자로 판단하기에는 어렵다.
따라서 정렬 기준 내에서 두 문자열을 미리 붙여보고 더 큰 문자열이 앞에 오도록 정렬하였더니 쉽게 해결이 되었다.
다만, 문제는 "가장 큰 수"를 의미하기 때문에 [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 |