출처
백준 온라인 저지
문제
주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자릿수를 있어 붙이면 새로운 수를 만들 수 있다.
예로 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다.
새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번 만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다.
풀이
각 자리 수를 구하는 수식을 알면 쉽게 풀 수 있는 문제입니다.
1의 자리에 있는 수 구하기: num % 10
10의 자리에 있는 수 구하기: Math.floor(num / 10)
1의 자리에 있는 수 10의 자리 수로 만들기 : (num % 10) * 10
const num = 27;
// 1의 자리에 있는 수 구하기
num % 10
// 7
// 10의 자리에 있는 수 구하기
Math.floor(num / 10)
// 2
// 1의 자리에 있는 수 10의 자리 수로 만들기
(num % 10) * 10
// 70
주어진 수를 10의 자리와 1의 자리에 있는 수를 구해서 두 수를 더해줍니다.
더한 값의 1의 자리에 있는 수와 주어진 수의 10의 자리 수를 구해준 후 더해줍니다.
그 후 if 문으로 입력값과 더 한 결과 값이 일치하면 while 문을 break 문으로 빠져오고 출력합니다.
10의 자리 수 => (26 % 6) = 2 , 2 * 10 => 20
즉 1의 자리의 수를 10의 자리로 만들어 더 해주기 위한 수식입니다.
문자열을 이용하는 방법도 있습니다. '1' + '1' = '11' 이 되는 것을 생각하면 됩니다.
코드
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);