반응형

문제출처

https://programmers.co.kr/learn/courses/30/lessons/42746


문제풀이

1
2
3
4
5
6
/**
 * 직감적으로 그냥 큰수가 앞에오면 된다고 생각할 수 있지만 10, 9 와같은 케이스에서 바로 걸린다.
 * 109보다 910이 더 크기 때문이다. string을 사용하여 10과 9를 붙인것과 9와 10을 붙인것을 비교해서 
 * 정렬한다면 쉽게 풀수 있는 문제입니다. 예를들어 [34, 345]가 있다면 34345와 34534를 비교해서 정렬을 하는데
 * 34534가 더 크므로 [345,34]와 같이 정렬될 것입니다. 또한 0일경우 예외사항으로 빼줘야 하는 것도 중요한 문제입니다.
 */
cs


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
bool comp(string &a, string &b) {
    return a+> b+a ? true : false;
}
string solution(vector<int> numbers) {
    string answer = "";
    vector<string> tmp;
    for(int i=0; i<numbers.size(); i++)
        tmp.push_back(to_string(numbers.at(i)));
    sort(tmp.begin(), tmp.end(), comp);
    for(string str : tmp) answer+=str;
    if(answer[0]=='0')  answer="0";
    return answer;
}
cs


반응형

'Algorithm' 카테고리의 다른 글

[BOJ 1102] 발전소  (0) 2019.01.30
[BOJ 1799] 비숍  (0) 2019.01.29
[BOJ 7562] 나이트의 이동  (0) 2019.01.28
[BOJ 9663] N-Queen  (0) 2019.01.28
[BOJ 2098] 외판원 순회  (0) 2019.01.28

+ Recent posts