카테고리 없음
[백준] 한수
Dev_Cat
2023. 6. 25. 15:27
728x90
반응형
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
문제에서 N은 1000이하 수다. 나는 1000 이상의 수에 대해서도 한수를 찾을 수 있게 string을 이용해 문제를 풀었다.
문제에 접근하기 전 N을 100 미만일때와 이상일때로 나눈다. 즉 N의 자리수가 2자리냐 3자리 이상이냐에 따라 문제를 접근한다.
해설
1) N이 100 미만일때 한수는 입력으로 들어온 수 N만큼 있다.
ex) N이 80이면 한수는 80개다.
2) N이 100 이상일때 한수는 각 자리수를 비교해 찾는다. 즉 각 자리수 값의 차를 비교하여 같으면 한수로 취급한다.
ex) 101이의 경우 각 자리수를 가져와 비교한다. 즉 백의 자리 = 1, 십의 자리 = 0, 일의 자리 = 1로 (백의 자리 - 십의 자리)와 (십의 자리 - 일의 자리) 의 값을 비교해 같다면 한수다.
풀이 코드
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
using namespace std;
int main(void)
{
FastIO;
string input;
std::cin >> input;
int n = std::stoi(input);
int result = 99; //100 이상부터 최소 한수는 99개다.
for(int i = 100; i <= n; i++)
{
string temp = std::to_string(i);
bool isHanso = true;
for(int j = 1; j < temp.size() - 1; j++)
{
if(temp[j] - temp[j-1] != temp[j+1] - temp[j])
{
isHanso = false;
}
}
if(isHanso)
{
result ++;
}
}
if(n < 100)
{
std::cout << n << "\n";
return 0;
}
std::cout << result << "\n";
return 0;
}
728x90
반응형