개발일지

[백준 JAVA] 1110번: 더하기 사이클 본문

Java/알고리즘 공부

[백준 JAVA] 1110번: 더하기 사이클

O'mil 2023. 1. 31. 10:33
728x90

#1110번: 더하기 사이클

문제


풀이
import java.util.Scanner;

public class Main_1110 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int N = in.nextInt();
        int a, b;

        int Sum = 0;
        int Sum1 = N;	// copy 수
        int n = N;
        int num = 0;	// 사이클 수

        if ( n <= 9) {
            a = 0;
            b = n;
        }
        else {
            a = n / 10;
            b = (n % 10) / 1;
        }

        while (true) {

            Sum = a + b;
            n = Sum;
            num++;

            a = b;
            b = (Sum % 10) / 1;
            Sum1 = 10 * a + b;

            if ( Sum1 == N) {
                break;
            }
        }
        in.close();
        System.out.println(num);
    }
}

- Sacnner로 수를 입력 받는다.

- 먼저 if문을 통해 9이하일 때와 10이상 일 때를 나누고 자리수를 분리한다.

- while문을 이용해 두 자리 수를 합하고 합할 때마다 사이클 수를 올린다.

- 그 후 다시 새로 만들어진 숫자를 가지고 다시 자리수를 나누고 이 숫자가 입력받은 수와 같을 시 while문을 종료시킨다.

* 반복문을 while문으로 사용해준 이유는 만족하는 값이 나올 때까지 반복문이 1번 이상 돌아가야 하기 때문이다.

 

 

내가 짠 코드보다 더 간단하게 짠 코드가 있을 것 같아 찾아보았다.

더보기
import java.util.Scanner;

public class Main_1110_T {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int N = in.nextInt();
        
        int num = 0;
        int copy = N;

        while(true) {
            N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
            num++;

            if (copy == N) {
                break;
            }
        }
        in.close();
        System.out.println(num);
    }
}

[1] (N % 10) * 10     // 기존 수의 일의 자리 수 = 새로운 수의 10의 자리수

 

[2] (((N / 10) + ( N % 10)) % 10)

1. N / 10        // 기존 수의 10의 자리 수

- 십의 자리가 0이면 0을 아니면 그 자리수를 그대로 반환한다.

 

2. N % 10     // 기존 수의 일의 자리수

 

3. (((N / 10) + ( N % 10)) % 10)     //새로운 수의 일의 자리 수

- 1 + 2는 기존 수(N)의 십의 자리와 일의자리를 합해준 값이다.

- 합해준 값을  % 10을 해준다면 새로운 수의 일의 자리가 나온다.

 

[1] + [2]는 새로운 수이다.

 


- 새로운 수가 생성되면 사이클 수(num)의 숫자를 하나 올려준다.

- 그 후 입력받은 값(copy)과 새로 생성된 수를 비교해 두 수가 같을 시 반복문을 종료한다.

 

 

 

 

 


참고)

https://st-lab.tistory.com/42

728x90
Comments