[해결과정]
1. string 배열을 활용하여 입력 값을 받는다.
2. sort STL을 사용하여 sort 시킨다. sort 할 때 비교 함수 cmp 정의를 다음과 같이 한다.
2-1. sort할 string 변수 2개를 각 각 a와 b로 설정한다.
2-2. a+b 그리고 b+a를 하여 이 두개의 값을 비교한다.
2-3. a+b가 크다면 a를 앞에, b+a가 크다면 b를 앞에 배치시킨다.
3. 모두 0으로 입력 되있을 경우 예외처리로 flag 변수를 둔다.
[소스코드]
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
41
42
43
44
45
46
47
|
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int MAX = 1001;
int n;
string s[MAX];
// 정렬 방식
bool cmp(string a, string b) {
// 숫자가 같다면 continue;
if (a == b) return false;
// 숫자가 다르다면 글자를 a b 순으로 붙여보고, b a 순으로 붙여본다.
// 그래서 ab 혹은 ba 중에 큰 것 경우의 숫자를 앞으로 배치.
string ab = a + b;
string ba = b + a;
if (ab > ba) return true;
else return false;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
cin.ignore();
//입력 값이 모두 0인 경우 체크 해주는 flag...
int flag = 0;
for (int i = 0; i < n; i++) {
cin >> s[i];
if (s[i] != "0") flag = 1;
}
if (flag == 0) cout << 0;
else {
//정렬
sort(s, s + n, cmp);
for (int i = 0; i < n; i++) cout << s[i];
}
return 0;
}
|
[해결 과정 중 실수한 부분]
전체적으로 sort 하는데, cmp함수에서 a와 b의 길이를 비교하고 작은 길이인 수에서 작은 길이 -1, 큰 길이 에서 작은 길이.. 즉 s1[b] 와 s2[b-1] 를 비교 했는데.. 메모리 오류가 발생했다. return 하는 과정에서 문제가 있었던 것 같다. 이 과정을 해결하려하다.. 번뜻 떠오른 아이디어가 위 해결 과정이였다.
원래 하려했던 과정 같은 경우 어차피 끝 길이만 비교하기에 숫자가 많았을 경우 중간 숫자는 넘겨버리는 문제가 발생했을 것이다.
[관련 문제 혹은 비슷한 문제]
'[PS] 문제풀이 > 백준' 카테고리의 다른 글
[ 백준 1614 ] 영식이의 손가락 (C++) (0) | 2019.12.04 |
---|---|
[ 백준 2733 ] Brain f*ck (C++) (0) | 2019.12.03 |
[ 백준 17822 ] 원판 돌리기 (C++) (0) | 2019.12.02 |
[ 백준 17836 ] 공주님을 구해라! (C++) (4) | 2019.11.29 |
[ 백준 17779 ] 게리맨더링2 (C++) (0) | 2019.11.28 |
댓글