WHAT I LEARNED/Algorithm

[javascript] 백준 1110 더하기 사이클

보니bonnie 2022. 3. 4. 10:47
728x90

규칙을 살펴보기 전, 숫자를 10으로 나누면 몫은 앞자리가, 나머지는 뒷자리가 되는 것을 한 번 더 떠올리고 들어가면 좋다!

26 / 10 = 몫: 2 / 나머지: 6

 

 

문제의 예시를 한 번 더 살펴보면,

26 → 2 + 6 = 868

입력값이 26인 경우, 2+6 = 8. 다음 수는 6이 10의 자리가 되고 8이 1의 자리가 되어서 68이 된다.

같은 과정을 반복하면 6+8 = 14. 다음 수는 8이 10의 자리가 되고 14의 오른쪽 수인 4가 1의 자리가 되어서 84가 된다.

 

여기서 입력값의 1의 자리는 다음 수의 10의 자리가 된다는 것, 각 자릿수의 합의 오른쪽 숫자가 1의 자리가 된다는 것이 포인트.

 

그럼 우리에게 필요한 과정은

1️⃣ 입력값의 10의 자리와 1의 자리를 뽑고, 

2️⃣ 그걸 더한 값의 1의 자리수를 뽑고,

3️⃣ 다음 수로 넘겨줄 1️⃣의 1의 자리와 2️⃣를 합친 값을 구한다.

 

 

 

먼저, 1️⃣

입력값의 10의 자리를 구하는 방법은 Math.floor(num / 10).

주어진 숫자와 같거나 작은 '정수' 중에서 가장 큰 수를 구하는 Math.floor함수를 이용하면 된다.

26의 경우, num = 26이므로 Math.floor(2.6)이 되어서 2가 도출된다.

 

입력값의 1의 자리를 구하는 방법은 num % 10

위에서 1의 자리는 10으로 나누었을 때 나머지라고 했었으니, 나머지의 값을 구하는 %를 사용하면 된다.

26의 경우, 26 % 10 = 6이 도출된다.

 

 

 

2️⃣

이제 이 두 값을 더하고, 그 값의 오른쪽 자릿수를 도출해내는 방법은? 위에서 했던 것과 똑같다!

먼저 두 값을 더하고 (Math.floor(num / 10) + num % 10),

오른쪽 자릿수, 즉 1의 자리를 구하는 방법! %10을 사용해주자!

그럼 68의 경우처럼 자릿수의 합이 10의 자리를 넘어가게 되더라도 오른쪽 자릿수, 1의 자리를 도출해낼 수 있다.

 

 

 

26 2 + 6 = 8 → 68

3️⃣

지금까지 26에서의 각 자릿수 2와 6을 뽑아내고, 자릿수들의 합의 1의 자리인 8을 구하는 것까지는 완료했다.

도출된 8은 다음 수의 1의 자리에 고대로 이용될 것이다.

 

그럼 다음 수의 10의 자리를 구하는 방법은? 즉, 6과 8을 합친 68에서 6을 구하는 방법은?

68의 6의 출처는 26의 1의 자리라는 것을 까먹지 말자!

그러므로 입력값 % 10으로 1의 자리를 먼저 도출한 후, 거기다 * 10을 해주면 1의 자리를 10의 자리로 만들 수 있다.

 

 

 

60 + 8 = 68 완성!

이렇게 규칙을 다 찾아두었으니, 다음 수가 입력값과 동일 할 때까지 횟수를 카운트해주는 반복문을 만들면 끝!

 

 

 

💡 답안 코드

let input = Number(require('fs').readFileSync('/dev/stdin').toString());

let num = input;
let sum;
let i = 0;

while (true) {
    i++;

    sum = Math.floor(num / 10) + num % 10;
    num = (num % 10) * 10 + sum % 10; 

    if (input === num) {
	break;
    } 
}

console.log(i);

while문을 통해 입력값의 각 자릿수의 합을 구하고 그걸 활용한 다음 수를 구하는 과정을 계속 반복하다가,

다음 수가 입력값과 동일해지면 break로 while문을 종료시키면 된다!

 

 

 

👀 Review

10으로 나눈 것의 몫과 나머지가 어떤 역할을 하는지 다시 한 번 리마인드!

 

📍출처

문제 https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 

728x90