[백준 9440번] 숫자 더하기
2017. 8. 30. 22:31ㆍ알고리즘/백준
반응형
방법
1. 0이 짝수개인지 홀수개인지 판별하고, 0이 아닌 숫자가 짝수개인지 홀수개인지 판별해서 총 4가지경우에 따라 숫자를 만들어주는 방법
2. 정수의 갯수가 매우작은 갯수를 가지므로 완탐을 통해 푸는 방법
Testcase
Input
5 1 2 7 8 9 6 3 4 2 2 2 2 9 0 1 2 3 4 0 1 2 3 10 9 8 7 6 5 0 1 2 3 4 11 1 2 3 4 5 6 7 8 9 0 1 12 1 1 1 1 1 1 1 1 1 1 1 1 13 1 9 0 0 0 1 9 0 0 0 0 0 0 13 0 0 0 0 0 0 1 9 0 0 0 9 1 13 1 9 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 9 1 14 1 9 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 9 1 14 1 9 0 0 0 2 8 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 2 8 0 0 0 9 1 0
Output
207 447 11257 34047 116047 222222 1100018 1100018 1900000 1900000 10000000 10000000 3000017 3000017
소스코드
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <iostream> using namespace std; int main() { while (1) { int n, num[15],zero=0,one=0; cin >> n; if (n == 0) break; for (int i = 0; i < n; i++) { cin >> num[i]; if (num[i] == 0) zero++; else one++; } //정렬 (->오름차순) for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (num[i] > num[j]) { int tmp = num[i]; num[i] = num[j]; num[j] = tmp; } } } int a = num[zero], b=num[zero+1]; //0이 짝수개 if (zero % 2 == 0) { //0이 아닌 숫자가 짝수개 if (one % 2 == 0) { for (int i = 0; i < zero / 2; i++) a *= 10; for (int i = 0; i < zero / 2; i++) b *= 10; for (int i = zero + 2; i < n; i+=2) a = a * 10 + num[i]; for (int i = zero + 3; i < n; i += 2) b = b * 10 + num[i]; } //0이 아닌 숫자가 홀수개 if (one % 2 == 1) { for (int i = 0; i < zero / 2; i++) a *= 10; for (int i = 0; i < zero / 2; i++) b *= 10; for (int i = zero + 2; i < n; i += 2) a = a * 10 + num[i]; for (int i = zero + 3; i < n; i += 2) b = b * 10 + num[i]; } } //0이 홀수개 if (zero % 2 == 1) { //0이 아닌 숫자가 짝수개 if (one % 2 == 0) { for (int i = 0; i < zero / 2+1; i++) a *= 10; for (int i = 0; i < zero / 2; i++) b *= 10; for (int i = zero + 2; i < n; i += 2) a = a * 10 + num[i]; for (int i = zero + 3; i < n; i += 2) b = b * 10 + num[i]; } //0이 아닌 숫자가 홀수개 if (one % 2 == 1) { for (int i = 0; i < zero / 2; i++) a *= 10; for (int i = 0; i < zero / 2+1; i++) b *= 10; for (int i = zero + 2; i < n; i += 2) a = a * 10 + num[i]; for (int i = zero + 3; i < n; i += 2) b = b * 10 + num[i]; } } cout << a + b << '\n'; } return 0; } | cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 4948번] 베르트랑 공준 (0) | 2017.09.03 |
---|---|
[백준 1063번] 킹 (0) | 2017.09.03 |
[백준 4963번] 섬의 개수 (0) | 2017.08.27 |
[백준 1269번] 대칭 차집합 (0) | 2017.08.23 |
[백준 1068번] 트리 (1) | 2017.08.21 |