본문 바로가기
Study (etc)/Problem Solving

[BOJ / C++] 1065번 : 한수

by Haren 2022. 11. 3.

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

Solved.ac 레벨

실버 IV

풀이

#include <bits/stdc++.h>

using namespace std;

int n, cnt;

void Solution(int num){
    int hun = num / 100;
    int ten = num % 100 / 10;
    int one = num % 10;
    
    if((hun - ten) == (ten - one)) cnt++;
    
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    cin >> n;

    if(n >= 1 && n < 100){
        cout << n << '\n';
        return 0;
    } else if(n >= 100 && n <= 1000){
        cnt = 99;
        for(int i = 100; i <= n; i++){
            Solution(i);
        }
    }

    cout << cnt << '\n';

    return 0;
}

1 ~ 1000 사이의 한수 중 입력된 N의 값까지의 한수의 개수를 출력하는 문제다. 

 

수를 써내려가면서 보면 1~99까지, 즉 두 자리 수에서는 모든 수가 등차수열이므로 한수다. 따라서 1~99까지에 대해서는 입력된 N을 그대로 반환하면 그것이 한수의 갯수이다. 

 

100 이상으로 넘어가면서가 문제이므로 99까지의 개수인 99로 cnt를 초기화 한 뒤, 각 자리수를 분리해서 백의 자리와 십의 자리, 십의 자리와 일의 자리의 차가 동일한지 판단을 해야한다. 해당 작업은 Solution 함수에서 행해진다.

 

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net