[백준 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;
}