본문 바로가기
코딩테스트/programming_C++

baekjoon #1065_한수_c++

by prometedor 2021. 10. 25.

어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고함

등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말함

N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램 작성

 

N이 1~9 인 경우 자리수가 하나 뿐이므로 모두 등차수열이라고 할 수 있음

N이 10~99 인 경우 자리수가 두 개 뿐이므로 1 2 이든지 9 5 이든지, 모두 등차수열이라고 할 수 있음 

 

ex) 10 : 길이가 2이고 각 항이 1 0 인 수열로, 공차가 -1인 등차수열임

11 : 길이가 2이고 각 항이 1 1 인 수열로, 공차가 0 인 등차수열임

...

100 : 길이가 3이고 각 항이 1 0 0 인 수열로, 등차수열이 아님

101 : 길이가 3이고 각 항이 1 0 1 인 수열로, 등차수열 아님

...

123 : 길이가 3이고 각 항이 1 2 3 인 수열로, 공차가 1인 등차수열임

246 : 길이가 3이고 각 항이 2 4 6 인 수열로, 공차가 2인 등차수열임

...

등등

 

#include<iostream>

bool hansoo(int X) {
  if (X < 100)
    return true;
  int a, b, c;
  a = X / 100;
  b = X % 100 / 10;
  c = X % 10;

  if (b - a == c - b)
    return true;
  return false;
}

int main() {
  int N, cnt = 0;

  std::cin >> N;
  for (int i = 1; i <= N;i++){  // N보다 작거나 같은 한 수의 개수를 출력하기 위한 반복문
    if (hansoo(i))  // hansoo(X) 함수 활용
      cnt++;  // 한수인 숫자의 개수 세기
  }
  std::cout << cnt;
}

a 는 백의 자리 수

b 는 십의 자리 수

c 는 일의 자리 수

 

100보다 작은 수는 자리수가 두 개 뿐이므로 1 2 이든지 9 5 이든지, 모두 등차수열임

공차가 같음을 판별해야하므로 b-a 와 c-b가 같은지 비교

hansoo 함수를 활용하여 한수인 숫자의 개수를 셈