Giken Dev
반응형

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

문제

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

입력

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

출력

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void num_hansoo() {
	int n;
	int cnt = 0;
	scanf("%d", &n);
	
	for (int i = 1; i <= n; i++) {
		if (i < 10) {
			cnt++;
		}
		else if (i < 100) {
			cnt++;
		}
		else {
			if ((i / 100 - i % 100 / 10) == (i % 100 / 10 - i % 10)) {
				cnt++;
			}
		}	
	}
	printf("%d\n", cnt);
}

int main() {
	num_hansoo();
}

ex)
1자리: 모두 한수 1, 2 ,3 , ---

2자리: 모두 한수 10, 11, 12, 13, ---

3자리: 일부 한수(등차가 최대 4 최소 -4)
111, 123, 135, 147, 159
210, 222, 234, 246, 258
321, 333, 345, 357, 369
420, 432, 444, 456, 468
531, 543, 555, 567, 579
---
951, 963, 975, 987, 999

 

이역시도 정수의 자릿수를 통한 연산을 통해 알고리즘을 만들어야했습니다.

  1. i를 1 부터 n까지 돌리며, 한수에 해당되면 cnt++한다.
  2. 1 - 1000을 자릿수로 분류한다.
  3. 한자리와 두자리는 전부 한수이기 때문에 무조건 cnt++ 한다.
  4. 세자리에서부터는 자릿수 사이의 등차가 같을때만 cnt++한다.

다양한 자릿수 연산의 문제를 풀고있기 때문에 저희는 이런 유형의 문제가 나오면 다 풀거예요~!

반응형
profile

Giken Dev

@기켄

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!