2019. 9. 3. 21:40ㆍ알고리즘/백준
문제
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 1
110
예제 출력 1
99
예제 입력 2
1
예제 출력 2
1
예제 입력 3
210
예제 출력 3
105
예제 입력 4
1000
예제 출력 4
144
문제 풀이
#include <iostream>
using namespace std;
bool hansoo(int a){
if(a < 100)
return true;
int a1, a2, a3;
a3 = a / 100;
a1 = a % 10;
a2 = a % 100 / 10;
if(a3-a2 == a2-a1)
return true;
return false;
}
int main(void){
int N, count = 0;
cin>>N;
for(int i =1; i <= N; i++){
if(hansoo(i))
count++;
}
cout<<count;
}
등차수열은 일정한 값이 한 방향으로 계속해서 증가하거나 감소하는 수열입니다.
그러므로 모든 두 자릿수는 각 자리수가 등차수열을 이룬다고 볼 수 있으므로 한수이지만 예제 1에서는 110을 입력받고 99를 출력하므로 1부터 99가 모두 한수로 인정됨을 알 수 있습니다.
그래서 hansoo 함수에 보면 100미만 자연수는 모두 true를 출력하여 count를 증가시키도록 구현하였습니다.
세 자릿수는 a3에 백의 자리, a2에 십의 자리, a1에 1의 자리를 각각 대입하였고,
a3-a2, a2-a1은 공차이므로 그 값이 서로 같아야 합니다.
같지 않으면 등차수열에 해당하지 않으므로 if 문의 조건을 만족하지 못하고 false를 리턴하였습니다.
마지막엔 count를 출력하시면 한수의 개수가 출력됩니다.
네 자리수에 대한 조건을 넣지 않았지만 어차피 1000은 false를 리턴하기 때문에 별다른 조건을 넣지 않았습니다.
출처 : https://www.acmicpc.net/problem/1065
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11720번 숫자의 합 C / C++ 문제 풀이 문자열 (0) | 2019.09.24 |
---|---|
[백준] 11654번 아스키 코드 C / C++ 문제 풀이 문자열 (0) | 2019.09.23 |
[백준] 15596번 정수 N개의 합 C++ 문제 풀이 함수 (0) | 2019.09.02 |
[백준] 10872번 팩토리얼 C++ 문제 풀이 함수 (0) | 2019.08.29 |
[백준] 4673번 셀프 넘버 C++ 문제 풀이 함수 (0) | 2019.08.16 |