문제 출처: www.acmicpc.net/problem/1065
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가 같으면 차이가 같기 때문에 각 자리의 수들은 등차 수열을 이루고 있다는 것을 알 수 있기에 그러한 수는 한수 인것이다.
개인적으로 한수에 대한 개념을 잘 몰라서 이 문제에서 조금 힘들었던 것 같다. 이 문제는 한수라는 개념만 이해한다면 쉽게 풀 수 있는 문제인 것 같다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 10809번: 알파벳 찾기 C언어 (0) | 2019.12.22 |
---|---|
백준 알고리즘 11720번: 숫자의 합 [Java] (0) | 2019.12.22 |
백준 알고리즘 4673번: 셀프 넘버 C언어(개선) (0) | 2019.12.11 |
백준 알고리즘 4673번: 셀프 넘버 C언어 (0) | 2019.12.09 |
백준 알고리즘 4344번: 평균은 넘겠지 C언어 (0) | 2019.12.08 |