[boj] (s4) 1065 한수

1861 단어 bojboj

문제

링크

풀이

처음에 모든 자리수의 차이가 등차수열인지 판별하기위해 애를 먹었다.
하지만 문제를 잘 읽어보면

  1. N은 1이상 1000이하인데 1000은 한수가 아니다.
  2. 1~99는 각 자리수의 차이를 비교할 수 없다. 하지만 예제2를 보면 그럴 경우에는 1로 처리하는 것을 알 수 있다. 즉 1~99에서 한수의 개수는 N과 같다.

👉 1, 2에 의해 주어진 N의 범위는 100~999, 세자리 숫자들로 줄여진다.
👉 따라서 모든 자리수의 차이가 등차수열인지 판별할 필요 없이 세자리 숫자의 자리수 차이가 등차수열인지만 판별하면 된다.

코드

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

bool fun(int x){ // 한수 판별
    int l, m, r; // 3가지 자리수
    l = x/100;
    m = x/10%10;
    r = x%10;

    if(2*m == l+r)
        return true;

    return false;
}

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

    int N, cnt;
    cin >> N;

    if(N>=100){
        cnt = 99;
        for (int i = 100; i <= N; i++)
        {
            if (fun(i) == true)
                cnt++;
        }
    }
    else cnt = N;
    

    cout << cnt << "\n";

    return 0;
}

https://hunidev.tistory.com/37

좋은 웹페이지 즐겨찾기