[백준 1065] 한수 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
1
부터 n
까지의 숫자 중에서 한수
인 숫자의 개수를 찾는 문제입니다.
한수
는 각 자릿수의 숫자들이 등차수열을 이루는 숫자를 뜻합니다.
첫 번째로, 1
부터 99
까지의 모든 수는 한수
입니다.
2자리 이하의 숫자에서 각 자릿수의 숫자로 만들어지는 수열은 항상 등차수열이기 때문입니다.
따라서, 주어진 수가 99
이하라면, 주어진 수를 그대로 반환하면 됩니다.
3자리 이상의 숫자에서 각 자릿수의 차이가 동일하다면 해당 숫자는 한수
이므로,
각 자릿수의 차이를 계산하고 그 차이가 동일한지를 검사하여 한수 여부를 알 수 있습니다.
주어진 범위 내에서 완전 탐색 방법으로 한수인지 아닌지를 검사하여 한수의 개수를 출력합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace Solution {
class Program {
static bool IsHan(int num) {
var strNum = num.ToString();
if (strNum.Length <= 2) return true;
var diff = strNum[1] - strNum[0];
for (int i = 2; i < strNum.Length; i++) {
if (strNum[i] - strNum[i - 1] != diff)
return false;
}
return true;
}
static void Main(string[] args) {
var n = int.Parse(Console.ReadLine()!);
int cnt = 0;
for (int i = 1; i <= n; i++)
if (IsHan(i)) cnt++;
Console.WriteLine(cnt);
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;
bool isHan(int num) {
string strNum = to_string(num);
if (strNum.length() <= 2) return true;
int diff = strNum[1] - strNum[0];
for (size_t i = 2; i < strNum.length(); i++) {
if (strNum[i] - strNum[i - 1] != diff)
return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
int cnt = 0;
for (int i = 1; i <= n; i++)
if (isHan(i)) cnt++;
cout << cnt << "\n";
return 0;
}