ALGORITHM/BOJ (Node.js)

❌❌ λ°±μ€€ 1110 javascript (node.js) 풀이

thisisyjin 2021. 12. 20. 15:00

while문 - (3)

 

 


 

πŸ’‘λ¬Έμ œ

0보닀 ν¬κ±°λ‚˜ κ°™κ³ , 99보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜κ°€ μ£Όμ–΄μ§ˆ λ•Œ λ‹€μŒκ³Ό 같은 연산을 ν•  수 μžˆλ‹€. λ¨Όμ € 주어진 μˆ˜κ°€ 10보닀 μž‘λ‹€λ©΄ μ•žμ— 0을 λΆ™μ—¬ 두 자리 수둜 λ§Œλ“€κ³ , 각 자리의 숫자λ₯Ό λ”ν•œλ‹€. κ·Έ λ‹€μŒ, 주어진 수의 κ°€μž₯ 였λ₯Έμͺ½ 자리 μˆ˜μ™€ μ•žμ—μ„œ κ΅¬ν•œ ν•©μ˜ κ°€μž₯ 였λ₯Έμͺ½ 자리 수λ₯Ό 이어 뢙이면 μƒˆλ‘œμš΄ 수λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. λ‹€μŒ 예λ₯Ό 보자.

26λΆ€ν„° μ‹œμž‘ν•œλ‹€. 2+6 = 8이닀. μƒˆλ‘œμš΄ μˆ˜λŠ” 68이닀. 6+8 = 14이닀. μƒˆλ‘œμš΄ μˆ˜λŠ” 84이닀. 8+4 = 12이닀. μƒˆλ‘œμš΄ μˆ˜λŠ” 42이닀. 4+2 = 6이닀. μƒˆλ‘œμš΄ μˆ˜λŠ” 26이닀.

μœ„μ˜ μ˜ˆλŠ” 4λ²ˆλ§Œμ— μ›λž˜ 수둜 λŒμ•„μ˜¬ 수 μžˆλ‹€. λ”°λΌμ„œ 26의 μ‚¬μ΄ν΄μ˜ κΈΈμ΄λŠ” 4이닀.

N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, N의 μ‚¬μ΄ν΄μ˜ 길이λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ“μž…λ ₯

첫째 쀄에 N이 주어진닀. N은 0보닀 ν¬κ±°λ‚˜ κ°™κ³ , 99보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

πŸ“ˆμΆœλ ₯

첫째 쀄에 N의 사이클 길이λ₯Ό 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯

26

예제 좜λ ₯

4

 

2+6 = 8  ---> 68

6+8 = 14 ---> 84

8+4 = 12 ---> 42

4+2 = 6 ---> 26

 

 


< μ½”λ“œ >

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);

input을 Number()μ•ˆμ— λ„£κ³ , 그것을 inputμ΄λΌλŠ” λ³€μˆ˜λ‘œ μ €μž₯ν•˜κ³ , num = input 으둜 지정해쀀닀.

 

while(true) - if - break 문을 μ‚¬μš©ν•΄μ„œ 

쑰건을 λ§Œμ‘±ν•˜λ©΄ while문을 λ²—μ–΄λ‚˜λ„λ‘ ν•œλ‹€.

 

i=0μ—μ„œ i++λ₯Ό λ¨Όμ € ν•΄μ£Όκ³ (카운트)

sum = μ‹­μ˜μžλ¦¬ + 일의자리 μ΄λ―€λ‘œ

 

μ‹­μ˜μžλ¦¬ = floor(num/10)

일의자리 = num % 10

 

num은 (즉, μƒˆλ‘œ κ°±μ‹ λœ numκ°’) 일의자리 * 10 + sum의 일의자리 이고,

 

input === num이 되면 break둜 while을 λΉ μ Έλ‚˜μ˜¨λ‹€.

 

 

 

❌ ν‹€λ Έλ˜ μ½”λ“œλ“€

 

#1. Reference Error

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

while(True){
   cnt++;

   sum = Math.floor(num/10) + num%10; // μ‹­μ˜μžλ¦¬ + 일의자리 
   num = (num%10)*10 + sum%10;

   if(num === input) break;
}
console.log(cnt);

 

#2. Syntax Error

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

while(True){
   cnt++;

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

   if(input === num) {
      break;
}
console.log(cnt);