[백준/C] 1065번 : 한수
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 ��
www.acmicpc.net
푸는 과정
'1보다 크거나 같고, N보다 작거나 같은 수 들 중에 각 자리가 등차수열을 이루는 수 개수를 출력한다'
N =1000이라 하고 생각해보자.
한 자리인 거는 다 한수, 두 자리수도 다 한수
그런데 세 자릿수는 좀 다르다.
각 자리의 값들 간의 차가 같은 경우를 세어주면 되는 것이다.
+ 네자리인 경우는 한수가 아니다 (참고로 이 문제에서 네 자릿수인 경우는 1000 밖에 없다.)
#include <stdio.h>
#define true 1
#define false 0
int isHan(int a) {
int a1, a2, a3;
if (a < 100)
return true;
else if (a>=100 && a<1000)
{
a1 = a % 10;
a2 = (a / 10) % 10;
a3 = (a / 100);
if ((a1 - a2) == (a2 - a3))
return true;
else
return false;
}
else { // a == 1000
return false;
}
}
int main(void) {
int n;
int i;
int cnt = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
if (isHan(i) == true)
cnt++;
}
printf("%d", cnt);
return 0;
}
틀렸습니다!
a3 = (a / 100); // (a/100)%10 이라고 했었다.
여기를 a3 = (a/100)%10; 이라고 했었다.
맞는 거 같은데 왜 안되지?라고 해서 두 계산의 결과를 비교해보았는데,
N = 1000일때
a/100 ==10, (a/100)%10 == 0으로 서로 다르게 나온다.
따라서 10 0 0 , 0 0 0으로 계산되어
isHan의 값이 전자는 false, 후자는 true가 나오게 된다.
세 자리 수인 경우가 딱 한 가지 있었는데, 그걸 고려하지 않아서 틀렸던 것이다.
그래서 그냥 네 자리인 경우에는 isHan이 false가 되도록 해주었다.