https://www.acmicpc.net/problem/1065
이 문제는 일단 한수라는 개념을 알아야한다. 한수란 각 자리수가 등차수열이 되어야 한다. 예를 들면, 234, 357 등으로 각 자리수가 등차수열만 만족시키면 된다. 여기서 문제는 100이하는 어떻게 해야하는가인데, 결론은 100이하의 수는 무조건 한수이다. 예를 들면, 25, 36, 29 등 무조건 한수의 조건을 만족시킨다. 이 개념만 알고 시작하면 어려운 문제는 아니다. 일단 직관적으로 풀었다. 더 좋은 방법도 충분히 많이 있을 것이라 생각이 드는 문제이다.
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 | #include <iostream> using namespace std; int han(int input, int count) { if (input < 100) return count += input; else if (input == 1000) han(input - 1, count); else { if ((input / 100 - (input % 100) / 10) == (input % 100) / 10 - (input % 10) / 1) count++; han(input - 1, count); } } int main() { int N; int count = 0; cin >> N; cout << han(N, count); return 0; } | cs |
'Algorithm Problems > BOJ' 카테고리의 다른 글
[1463번] 1로 만들기 - 동적계획법 [C++] (0) | 2017.05.11 |
---|---|
[1780번] 종이의 개수 - 분할정복법 [C++] (1) | 2017.05.11 |
[1181번] 단어 정렬 - Sorting[C++] (0) | 2017.03.27 |
[10820번] 문자열 분석 - String[C++] (0) | 2017.03.15 |
[10809번] 알파벳 찾기 - String[C++] (1) | 2017.03.15 |