개발자/C or C++

[백준] 1065번

Mosser 2021. 10. 1.
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

댓글