프로그래밍/알고리즘

BOJ 1065 · 한수

반응형


알고리즘 분류 : 브루트 포스  


정수 N이 주어질 때, 1부터 N 사이에 존재하는 한수의 수를 구하는 알고리즘을 짜는 문제다. 한수란 각 자릿수가 등차수열을 이루는 수를 말한다. 예를 들면 123은 1, 2, 3 순으로 1씩 증가하는 한수이며, 642는 6, 4, 2 순으로 2씩 감소하는 한수이다. 한 자릿수, 두 자릿수는 모두 한수이며, 세 자릿수 이상은 각 자릿수가 일정한 공차를 이루고 있어야만 한다.


  • N이 100 미만일 경우, N이 한수의 수를 나타낸다.
  • N이 100 이상이면, (백의 자릿수-십의 자릿수) == (십의 자릿수-일의 자릿수)를 판별해서 카운트하면 된다.
  • 백의 자릿수는 N/100, 십의 자릿수는 N/10%10, 일의 자릿수는 N%10으로 표현할 수 있다.




C++ 소스코드


#include <cstdio>

int main() {
    int n;
    int cnt = 99;
    scanf("%d", &n);
    if (n < 100) printf("%d\n", n);
    else {
        for (int i=100; i<=n; i++) {
            if (i/100-i/10%10 == i/10%10-i%10) cnt++;
        }
        printf("%d\n", cnt);
    }
    return 0;
}




Python 3 소스코드


n = int(input())
cnt = 99
if n < 100:
    print(n)
else:
    for i in range(100, n+1):
        if i//100-i//10%10 == i//10%10-i%10:
            cnt += 1
    print(cnt)




참고



반응형