백준 1065번 - 한수

Updated:

C++

1065번 - 한수

문제 출처

접근

우선 1~99 까지는 각 자리의 수 차이의 비교 대상이 없어서 한수라고 생각 할 수 있다. 이후 100 부터는 각 자리의 수를 구하여 차이 값을 이용해 등차수열이면 cnt를 증가시킨다.

이 문제의 조건이 1000까지이기 때문에 100의 자릿수 까지의 int형 변수로 풀어도 가능하다. 만약 조건이 1,000,000 까지 올라간다면 위의 때려박는 식의 코드는 통하지 않을 것 같아 n의 크기의 상관없이 성립하는 코드를 다시 짜볼 필요가 있다.

코드

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int n;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> n;
	int cnt = 0, one, ten, hun, curN;
	for (int i = 1; i <= n; i++) {
		curN = i;
		if (i < 100) {
			cnt++;
		}
		else {
			one = curN % 10;
			curN /= 10;
			ten = curN % 10;
			curN /= 10;
			hun = curN;
			if (ten - one == hun - ten) {
				cnt++;
			}
		}
	}
	cout << cnt;
	return 0;
}

후기 및 개선할 점

걸린 시간 : 20분