본문 바로가기

알고리즘!

백준 1065번-한수

문제

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

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<numeric>
using namespace std;

int main() {
	int n,cnt=0;
	string nam;
	cin >> n;
	if (n < 100) {
		for (int i = 1; i < n + 1; i++) {
			cnt++;
		}
	}
	else {
		cnt = 99;
		for (int i = 100; i < n + 1; i++) {
			nam = to_string(i);
			if ((nam[0] - nam[1]) == (nam[1] - nam[2]))
				cnt++;
		}
	}
	cout << cnt << endl;
	
}

한수의 개념을 이해하기 조금 까다로웠다. 자릿수 별로 등차수열이면 한수라 하기에 자릿수가 한자리면 무조건 한수고 두자리여도 비교할것이 없기에 한수가 된다 따라서 100 미만이면 무조건 한수이기에 갯수를 계산하면 된다.

100이상이면 99까지의 한수가 99개 이므로 99부터 시작하고 to_string함수를 통해 숫자를 string형태로 바꿔줘서 index로 비교한다. 입력조건에 1000 미만이므로 3자리가 고정이라는 뜻이기 때문에 첫째와 둘째의 차와 둘째와 셋째의 차가 같으면 등차수열로 인정하고 cnt를 늘려주면 된다.

'알고리즘!' 카테고리의 다른 글

백준 1107번-리모컨  (0) 2019.07.05
백준 1018번-체스판 다시 칠하기  (0) 2019.07.05
백준 2941번-크로아티아 알파벳  (0) 2019.07.02
백준 4344번-평균은 넘겠지  (0) 2019.06.27
백준 1546번-평균  (0) 2019.05.27