문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
풀이 과정
각 자리가 등차수열을 이루어야 한다고 하고, 1보다 크거나 같고 N (최대 1,000)보다 작거나 같은 한수의 개수를 출력해야 한다고 한다. 일단 구해야 하는 것을 알아보도록 하자.
한수는 해당 수의 각 자리 수가 등차수열을 이룰 때 한수라고 한다고 한다.
즉, 1부터 99까지 (숫자가 한 자리 수, 두 자리 수 인 경우) 는 무조건 한수이다.
한 자리 수는 항이 하나 뿐이고, 두 자리 수는 항이 두 개 뿐이므로 이 두 경우는 무조건 각 자리가 등차수열을 이룬다.
만약 N이 1 ~ 99 사이로 입력된다면, N을 출력하면 된다.
만약 N이 100 이상이라면, 100부터 999까지 (숫자가 세 자리 수 인 경우) 숫자의 각 자리가 등차수열을 이루는지 직접 검사한다. 네 자리 수인 1000은 등차수열이 아니니 제외한다.
C
#include <stdio.h>
int min(int a, int b) {
if (a < b) return a;
return b;
}
int main(void) {
int n;
scanf("%d", &n);
if (n <= 99) printf("%d", n);
else {
int count = 99;
for (int i = 100; i <= min(999, n); i++) {
int n1 = i / 100;
int n2 = i % 100 / 10;
int n3 = i % 10;
if (n1 - n2 == n2 - n3) count += 1;
}
printf("%d", count);
}
return 0;
}
Python
import sys
input = sys.stdin.readline
n = int(input().rstrip())
if n <= 99: print(n)
else:
count = 99
for i in range(100, min(1000, n + 1)):
n1 = i // 100
n2 = i % 100 // 10
n3 = i % 10
if n1 - n2 == n2 - n3: count += 1
print(count)
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 10773 : 제로 ( SILVER 4 ) / C, Python (0) | 2023.11.28 |
---|---|
[ BOJ ] 10845 : 큐 ( SILVER 4 ) / C, Python (0) | 2023.11.28 |
[ BOJ ] 1158 : 요세푸스 문제 ( SILVER 4 ) / C, Python (0) | 2023.11.28 |
[ BOJ ] 9291 : 스도쿠 채점 ( SILVER 4 ) / C, Python (0) | 2023.11.28 |
[ BOJ ] 9012 : 괄호 ( SILVER 4 ) / C, Python (0) | 2023.11.28 |