본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 1065번 한수 - [c/c++] 풀이

by 미니상미니 2022. 10. 13.
반응형

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

 

 

 


  • 문제

단계별로 풀어보기 - 함수 - [3단계] 1065번


해설

if (n >= 99) ans = 99;
else ans = n;

3자리수 미만인 수 즉 1부터 99까지는 모두 한수이므로

수가 99이상일 경우 한수의 최소 개수는 99,

수가 99보다 작을 경우 한수의 개수는 그 수가 된다.

 

한수인 지 체크하는 함수 bool check(int n)을 작성하였다.

세 자리 수부터 들어오므로 백의 자리 수, 십의 자리 수, 일의 자리 수를 각각 구하여 공차가 같은 지 확인하고,

만약 공차가 같다면 true, 아니라면 false를 반환시켰다.

 

100부터 입력된 수까지 반복문을 돌려 check함수를 통해 true일 경우 ans의 개수를 증가시켰다.

 

 

코드

c

#include <stdio.h>

bool check(int n) {

	int hun = n / 100;
	int ten = n / 10 % 10;
	int one = n % 10;

	if (hun - ten == ten - one) return true;

	return false;
}


int main() {

	int n;
	int ans;

	scanf("%d", &n);

	// 1~99는 모두 한수이다.
	if (n >= 99) ans = 99;
	else ans = n;

	for (int i = 100; i <= n; i++) {
		if (check(i)) ans++;
	}

	printf("%d", ans);


	return 0;
}

 

c++

#include <iostream>

using namespace std;


bool check(int n) {

	int hun = n / 100;
	int ten = n / 10 % 10;
	int one = n % 10;

	if (hun - ten == ten - one) return true;

	return false;
}


int main() {
	
	int n;
	int ans;

	cin >> n;
    
	// 1~99는 모두 한수이다.
	if (n >= 99) ans = 99; 
	else ans = n;

	for (int i = 100; i <= n; i++) {
		if (check(i)) ans++;
	}

	cout << ans;


	return 0;
}

 

 

 

 

반응형

댓글