[백준/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가 되도록 해주었다.
댓글을 사용할 수 없습니다.