[boj] (s4) 1065 한수
문제
풀이
처음에 모든 자리수의 차이가 등차수열인지 판별하기위해 애를 먹었다.
하지만 문제를 잘 읽어보면
- N은 1이상 1000이하인데 1000은 한수가 아니다.
- 1~99는 각 자리수의 차이를 비교할 수 없다. 하지만 예제2를 보면 그럴 경우에는 1로 처리하는 것을 알 수 있다. 즉 1~99에서 한수의 개수는 N과 같다.
👉 1, 2에 의해 주어진 N의 범위는 100~999, 세자리 숫자들로 줄여진다.
👉 따라서 모든 자리수의 차이가 등차수열인지 판별할 필요 없이 세자리 숫자의 자리수 차이가 등차수열인지만 판별하면 된다.
코드
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool fun(int x){ // 한수 판별
int l, m, r; // 3가지 자리수
l = x/100;
m = x/10%10;
r = x%10;
if(2*m == l+r)
return true;
return false;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, cnt;
cin >> N;
if(N>=100){
cnt = 99;
for (int i = 100; i <= N; i++)
{
if (fun(i) == true)
cnt++;
}
}
else cnt = N;
cout << cnt << "\n";
return 0;
}
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool fun(int x){ // 한수 판별
int l, m, r; // 3가지 자리수
l = x/100;
m = x/10%10;
r = x%10;
if(2*m == l+r)
return true;
return false;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, cnt;
cin >> N;
if(N>=100){
cnt = 99;
for (int i = 100; i <= N; i++)
{
if (fun(i) == true)
cnt++;
}
}
else cnt = N;
cout << cnt << "\n";
return 0;
}
https://hunidev.tistory.com/37
Author And Source
이 문제에 관하여([boj] (s4) 1065 한수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@peanut_/boj-s4-한수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)