Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 7의 배수 판별하기 – 자릿수 줄이기 알고리즘과 단계별 결과 구하기

문제 설명

어떤 수가 10a + b 형태로 표현될 때, a − 2b가 7로 나누어떨어지면 원래의 수 역시 7의 배수라는 수학적 성질이 있습니다.

이 규칙을 7의 배수 여부를 명확히 알 수 있는 수가 나올 때까지 반복해서 적용합니다. 두 자리 이하의 숫자는 7의 배수인지 쉽게 판단할 수 있으므로, 수가 두 자리 이하가 되는 시점에 계산을 멈추면 됩니다.

따라서 우리가 작성해야 할 것은 하나의 숫자를 입력받아 위 과정을 반복하고, 두 자리 이하의 수로 줄이는 데 필요한 단계 수(반복 횟수)와 마지막에 얻어진 두 자리 이하의 숫자를 함께 반환하는 JavaScript 함수입니다.

입력

const num = 1603;

출력

const output = [7, 2];

그 이유는 다음과 같은 단계를 거치기 때문입니다.

160 − 2 × 3 = 154
15 − 2 × 4 = 7

최종 값은 7이며, 7은 7의 배수이므로 1603 역시 7의 배수임을 알 수 있습니다.

예제 코드

다음은 위 로직을 구현한 JavaScript 코드입니다.

const num = 1603;

const findSteps = (num) => {
  let times = 0;
  let result = 0;
  let number = String(num);

  while (number.length > 2) {
    times++;
    const lastDigit = Number(number.slice(-1));
    const remaining = Number(number.slice(0, number.length - 1));
    result = remaining - 2 * lastDigit;
    number = String(result);
  }

  return [result, times];
};

console.log(findSteps(num)); // [7, 2]

코드 동작 원리

알고리즘의 핵심 흐름은 다음과 같습니다.

1. 숫자를 문자열로 변환하여 자릿수를 손쉽게 다룰 수 있게 합니다.
2. slice(-1)로 마지막 자릿수(b)를, slice(0, length - 1)로 나머지 앞부분(a)을 분리합니다.
3. a − 2b를 계산한 뒤 다시 문자열로 저장하여 다음 반복의 대상으로 삼습니다.
4. 숫자의 길이가 2 이하가 될 때까지 이 과정을 반복합니다.
5. 반복이 끝나면 [최종 숫자, 반복 횟수] 형태의 배열을 반환합니다.

출력 결과

[7, 2]

이처럼 간단한 문자열 조작과 반복문만으로 7의 배수 판별 규칙을 효율적으로 구현할 수 있습니다.