#45. 백준 1065번 문제 풀이: 한수 | 문제 원본 보기 |
--입력-- 110 --출력-- 99
한수를 체크하는 함수를 만들고, 루프를 돌려서 한수체크 함수를 불러 한수의 개수를 계산한다. 일단 1 부터 99 까지는 모두 등차수열이다. 그러므로 100 부터 제한값인 999까지만 체크하면 된다. 등차수열임을 계산하는 함수는 아래와 같이 작성할 수 있다. 1) 1의 자리수와 10의 자리수의 간격을 구한다. 2) 10의 자리수와 100의 자리수의 간격을 구한다. 3) 두 간격이 같으면 등차 수열이다. 99 보다 큰 수의 등차수열 개수는 위 함수를 루프로 돌려서 카운트하면 된다.
#include <iostream>
using namespace std;
// 한수인지 체크하는 함수
int hansu(int n) { // n: 확인할 숫자, 리턴: 한수이면 1, 아니면 0
int n2, d;
if(n < 100) return 1; // 1~99는 모두 등차수열
n2 = n / 10; // 끝자리 없앰
d = n%10 - n2%10; // 1의 자리수-10의 자리수=간격
while(n2 > 9) { // 마지막 한 자리수 이미 계산 끝난 상태므로 루프 끝
if(d != (n2%10 - (n2/10)%10)) return 0;
// 앞을 자리수 뺀값이 기존 간격과 다르면 한수가 아님. 리턴 0 끝.
n2 = n2 / 10; // 끝자리 없앰
}
return 1; // 간격이 모두 같으므로 한수. True 리턴
}
int main() {
int i, n, count = 0;
cin >> n; // 숫자를 입력받아 정수로 만들어 대입한다. 최대값 n
count = 99; // 99까지는 모두가 등차수열임
if(n < 99) { // 99보다 작으면 그 값이 등차수열 갯수
count = n;
} else { // 99보다 크면 100 이상 숫자부터 그 값까지 한수 계산
for(i = 100; i < n+1; i++) {
if(hansu(i)==1) count++; // 한수이면 카운트 증가
}
}
cout << count; // 한수의 총갯수 count 출력
return 0;
}