반응형
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 | #include <iostream> using namespace std; int numbers[10] = { 0, }; int main() { int n; scanf("%d", &n); if (n == 0) { cout << 1 << '\n'; return 0; } while (n >= 1) { numbers[n % 10]++; n /= 10; } int max = 0; int maxIdx; for (int i = 0; i < 9; i++) { if (i == 6) continue; if (max < numbers[i]) { max = numbers[i]; maxIdx = i; } } int last = ((numbers[9] + numbers[6]) % 2 == 1) ? (numbers[9] + numbers[6]) / 2 + 1 : (numbers[9] + numbers[6]) / 2; if (last >= max) max = last; cout << max << '\n'; return 0; } | cs |
0부터 9까지 있는 숫자 모양 세트를 사는데 몇 세트를 최소로 살 수 있냐는 문제이다.
여기서 주의할 점은 6과 9는 서로를 대신할 수 있다는 점이다.
먼저 시작점으로 numbers라는 원소를 10개 가지고 있는 배열을 하나 선언한다. 그리고나서 받아온 숫자 중 속하는 숫자가 있다면 그 숫자의 인덱스에 맞게 numbers를 증가시켜준다.
마지막으로 어떤 숫자가 가장 크냐를 따지는데 가장 큰 숫자를 따지는 과정에서 6과 9는 제외한다. 그 이유는 위에 주의해야할 점으로 6과 9는 서로를 대신할 수 있기 때문이다.
max를 구하고 난 이후 마지막으로 숫자9와 6의 개수를 따져서 max와 비교해서 어느 수가 큰지를 비교해준다.
last를 구하는 식은 6과 9를 더했을 때 홀수가 된다면 한 세트가 더 필요한 것이므로 2로 나눈 값에 1을 더해준 것이다.
예를 들어 69699라는 숫자가 오면 3세트가 필요하므로 5 / 2 의 값에 + 1을 해준 것이다.
'알고리즘 > 백준' 카테고리의 다른 글
2750번 수 정렬하기 (0) | 2018.10.11 |
---|---|
6064번 카잉 달력 (0) | 2018.10.11 |
2775번 부녀회장이 될테야 (0) | 2018.10.10 |
10250번 ACM 호텔 (0) | 2018.10.10 |
1193번 분수찾기 (0) | 2018.10.10 |