본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 1065번: 한수 C언어

문제 출처: www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

1. 코드

#include <stdio.h>

int main(void)
{
	int n, i, j;
    	int han = 99, ch1, ch2;
	scanf("%d", &n);

	if (n < 100)
	{
		printf("%d", n);
		return 0;
	}

	for (i = 100; i <= n; i++)
	{
		ch1 = i / 100 - i / 10 % 10;     //백의 자릿수와 십의 자릿수의 수 차이
		ch2 = i / 10 % 10 - i % 10;      //십의 자릿수와 일의 자릿수의 수 차이
        
		if (ch1 == ch2)
			han++;
	}

	printf("%d\n", han);
	return 0;
}

2.느낀점

처음에 한수가 무엇인지 정확히 몰라서 검색하여 알아보는 것부터 시작했다. 한수란 간단히 말하면 한 숫자에 각 자릿수의 차이가 일정한 등차수열을 이룰 때 한수라고 하는데 만약 한 자리의 수나 두 자리의 수 같은 경우에는 한수라고 한다.

그래서 입력한 수가 100이하 일때 그대로 출력하고 만약 아니라면 99부터 시작하게 만들었다. 그리고 반복문을 통해서 입력한 수 이하의 숫자 한수를 체크하는데 ch1은 백의 자릿수와 십의 자릿수의 차이 ch2은 십의 자릿수와 일의 자릿수의 차이를 각각 저장하여 만약 ch1과 ch2가 같으면 차이가 같기 때문에 각 자리의 수들은 등차 수열을 이루고 있다는 것을 알 수 있기에 그러한 수는 한수 인것이다.

개인적으로 한수에 대한 개념을 잘 몰라서 이 문제에서 조금 힘들었던 것 같다. 이 문제는 한수라는 개념만 이해한다면 쉽게 풀 수 있는 문제인 것 같다.