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

김한주·2022년 10월 25일
0

문제

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의 사이클 길이를 출력한다.

예제 입력 1

26

예제 출력 1

4

예제 입력 2

55

예제 출력 2

3

예제 입력 3

1

예제 출력 3

60

예제 입력 4

0

예제 출력 4

1

풀이

//원래 수로 돌아올 때까지 연산을 반복하는 문제
var fs = require('fs')
var input = fs.readFileSync('/dev/stdin').toString().trim();
var n = parseInt(input);
var i = 0; 
if(n<10){
    var a = 0;
    var b = parseInt(input);
} else{
    var a = parseInt(input[0]); 
    var b = parseInt(input[1]);  
}
while(true){
    var hap = (a+b)%10;     
    a=b;        
    b=hap;      
    i++;
    if(n == parseInt(a+''+b)){
        console.log(i);
        break;
    }
}

다른 방법

var num = n;
while(true){
    var hap = parseInt(num%10 + num/10);
    num = (num%10)*10 + hap%10;
    i++;
    if(num == n)
        break;
}

해설

0보다 크거나 같고, 99보다 작거나 같은 정수가 입력되므로 10보다 작으면 a에 0을 대입하여서 결과적으로 a에 십의자리수, b에 일의자리수가 대입되게 하였다.
while문으로 반복하며 hap에 각 자리수를 더하고 %10을 통해 새로 만들어진 합의 일의 자리를 구하였다. 그 후, a에는 b를 대입하고 b에는 hap을 대입하여 새로운 수를 만들었다. i++를 통해 원래 수로 돌아올 때 까지의 사이클을 계산하였다. 입력받은 n과 parseInt(a+''+b)를 비교하여 같으면 사이클 i의 수를 출력하고 break로 반복문을 끝내주었다.

다른방법은 hap에 각 자리를 더해주었고 새로운 수를 만들어 num에 다시 할당해주었다. 각 자리수를 따로 계산한 위 해설과 달리 새로운 수를 num에 저장했다는 차이가 있다.

profile
HANJUMON의 성장과정!

0개의 댓글