본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 한수 1065 (Javascript, c++)

by Cafe Mocha 2022. 6. 10.

1065번: 한수 (acmicpc.net)

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net


접근 방법

N<=1000

알고리즘 : Brute force

 

1. N을 자리수 별로 구분한 후 for 문

2. 99까지는 n 리턴 100이상일때 자리수 구분 후 for 문


Javascript

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split("\n")
    .map((val) => val.trim());

  let n = +input[0];
  let cnt = 0;

  if (n <= 99) {
    cnt += n;
  } else {
    cnt += 99;
    for (let i = 100; i <= n; i++) {
      let divideNum = String(i)
        .split("")
        .map((v) => +v);
      let len = divideNum.length;
      let tmp = divideNum[1] - divideNum[0];
      let check = false;
      for (let j = 2; j < len; j++) {
        if (tmp !== divideNum[j] - divideNum[j - 1]) {
          check = false;
          break;
        } else {
          check = true;
        }
      }
      if (check) {
        cnt++;
        check = false;
      }
    }
  }

  console.log(cnt);
}

solution();

 


C++

#include <bits/stdc++.h>
using namespace std;

bool checkNum(int n);

int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

  int n;
  cin>>n;

  int cnt = 0;

  for(int i=1; i<=n;i++){
    if(checkNum(i)) cnt +=1;
  }

  cout<<cnt<<"\n";


  return 0;
}

bool checkNum(int n){
  int d1,d2,d3;
  d1 = n/100;
  d2 = (n/10)%10;
  d3 = n%10;

  int diff1, diff2;
  diff1 = d2-d1;
  diff2 = d3-d2;

  if(n<100|| diff1 == diff2) return true;
  else return false;
}