반응형
알고리즘 분류 : 브루트 포스
정수 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)
참고
반응형