개발자/C or C++
[백준] 1065번
728x90
반응형
문제
해결 방법
이 문제는 등차수열의 개념을 알아야합니다. 개념은 문제 설명에서 간단하게 나와있고, 핵심은 바로 입력값이 1000보다 작다입니다. 만약에 1000보다 크고 10000 이 정도의 숫자가 넘었다면 더 어려웠을지도 모릅니다. 왜냐하면 while문으로 N의 값이 0이 될때까지 자릿수의 차이를 비교해야하니까요. 근데 이 문제는 최대 3번정도만 차수를 구하면 됩니다. 1000이 입력으로 들어올경우에는 한수가 아니므로 예외처리를 하면됩니다.
코드가 이해하기 어려우실 경우 세자리 숫자 하나를 가지고 손으로 따라가보시면 아마 쉽게 이해하실 수 있으실 겁니다.
소스 코드
#include <stdio.h>
int isHan(int num){
int current_diff,before_diff;
int temp,temp1;
if(num<100){ //num이 100보다 작으면 무조건 한수이므로 1 return
return 1;
}
if(num==1000) //num이 1000이면 무조건 한수가 아니므로 0 return
return 0;
// 3자리 수 일때, 한수인지 체크하는 과정
temp=num%10; //마지막 자리
num/=10;
temp1=num%10; //두번째 자리
num/=10;
current_diff=temp-temp1; //마지막자리 - 두번째 자리
temp=num%10; // 첫번째 자리 구하기
before_diff=temp1-temp; //두번째 자리 - 첫번째 자리
if(current_diff==before_diff) // 첫번째자리와 두번째자리의 차 == 두번째자리의 차와 세번째 자리의 차 비교
return 1; //같으면 한수이므로 1 return
else
return 0; //다르므로 한수가 아니다.
}
int main(){
int N;
scanf("%d",&N);
int i=1;
int count=0;
for(i=1;i<=N;i++){
if(isHan(i))
count++;
}
printf("%d\n",count);
}
문의사항이나 궁금한 점, 다른 좋은 알고리즘이 있으시다면 댓글이나 쪽지로 부탁드립니다!
감사합니다.
반응형
'개발자 > C or C++' 카테고리의 다른 글
[백준] 8958번 (0) | 2021.10.01 |
---|---|
[백준] 2577번 (0) | 2021.10.01 |
[백준] 4673번 (0) | 2021.10.01 |
[백준] 4344번 (0) | 2021.10.01 |
[백준] 1546번 (0) | 2021.10.01 |
댓글