Ethan(기린)
그린기린그림 일기
Ethan(기린)
전체 방문자
오늘
어제
  • 전체보기 (43)
    • Language (4)
      • JavaScript (4)
    • Web (0)
      • HTML (0)
    • Problem Solving (29)
      • BOJ (18)
      • 프로그래머스 (10)
    • Computer Science (3)
      • Algorithm & Data Structure (2)
      • Network (1)
    • Error Log (4)
    • Config (1)
      • Test (1)
    • Thinking (2)
      • Retrospect (2)
      • Essay (0)
    • Book (0)

인기 글

최근 글

최근 댓글

태그

  • JavaScript
  • 백준
  • 문자열
  • Java
  • 알고리즘
  • Lv. 1
  • Lv. 2
  • Object-oriented programming
  • boj
  • Java의 정석 3rd Edition
  • 객체 지향 프로그래밍
  • 완전탐색
  • Problem Solving
  • 프로그래머스
  • OOP

티스토리

hELLO · Designed By 정상우.
Ethan(기린)

그린기린그림 일기

[백준 1065/함수]한수 - JavaScript
Problem Solving/BOJ

[백준 1065/함수]한수 - JavaScript

2021. 10. 10. 18:38

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net


내 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

solution(+input[0]);

// 입력 받은 숫자에 대해 한수를 판별하는 함수
function f(num){
  const strNum = String(num);
  // 두 자릿수 이하는 비교할 공차가 첫, 두 번째 원소만 해당되므로 true(참)을 반환
  if(strNum.length <= 2) {
    return true;
  }
  // 세 자릿수(3개의 값) 이상 부터 한수 체크
  const diff = +strNum[1] - +strNum[0]; // 현재 공차
  let beforeNum = +strNum[1]; // 이전 후위 피연산자 저장
  // 1과 0에 대한 자릿수 비교는 위에서 진행하므로.. i의 값은 2부터 시작한다.
  for(let i = 2; i < strNum.length; i++){ 
  // i번째 자릿수의 값이 이전 후위 피연산자를 '-'연산해서 그 공차가 현재 공차와 다르다면
    if(strNum[i] - beforeNum !== diff) { 
      return false; // false(거짓)을 반환
    }
    // i번째 자릿수의 값을 이전 후위 피연산자로 할당시켜, 다음 반복에 대한 연산을 준비한다.
   beforeNum = +strNum[i]; 
  }
  // 비교가 중간에 문제 없이 완료되면 true(참)을 반환
  return true;
}

function solution(N){
  let cnt = 0;
  for(let i = 1; i <= N; i ++){
    if(f(i)){ // 한수 판별 후 참인 값에 대해 cnt의 값을 증감시킨다.
      cnt++;
    }
  }
  console.log(cnt);
}

한수는 각 자릿수의 등차수열을 이루는 수를 말한다. 예를 들어서 123이라는 값을 생각해볼 때,

각 자릿수가 1, 2, 3 의 공차가 1인 등차수열을 이루므로 123이라는 수는 한수가 된다.

즉, 입력 받은 숫자에 대해서 각 앞 뒤 간의 자릿수를 순서대로 공차를 구하고

그것이 등차수열이 이루는지 자릿수를 가공하고 비교해야하는데,

두 자릿수 이하의 숫자에 대해서는 특별히 비교할 필요 없이 한수가 성립되므로,

1000이하의 자연수라고 가정할 때, 세 자릿수 혹은 네 자릿수에 대한 한수 비교를 처리해주면 된다.

 

저작자표시 비영리 (새창열림)

'Problem Solving > BOJ' 카테고리의 다른 글

[백준 11720번/문자열] 숫자의 합 - Java  (0) 2021.03.16
[백준 4344번/1차원 배열] 평균은 넘겠지 - Java  (0) 2021.03.15
[백준 8958번/1차원 배열] OX퀴즈 - Java  (0) 2021.03.15
[백준 1546번/1차원 배열] 평균 - Java  (0) 2021.03.15
[백준 3052번/1차원 배열] 나머지 - Java  (0) 2021.03.15
    'Problem Solving/BOJ' 카테고리의 다른 글
    • [백준 11720번/문자열] 숫자의 합 - Java
    • [백준 4344번/1차원 배열] 평균은 넘겠지 - Java
    • [백준 8958번/1차원 배열] OX퀴즈 - Java
    • [백준 1546번/1차원 배열] 평균 - Java
    Ethan(기린)
    Ethan(기린)

    티스토리툴바