관리 메뉴

사과하는 제라스

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

JAVA 백준 알고리즘 문제풀이/반복문

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

Xerath(제라스) 2022. 3. 28. 22:18

목차

    728x90
    반응형

    출처 : https://www.acmicpc.net/problem/1110

     

    1110번: 더하기 사이클

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

    www.acmicpc.net

     

    1. 문제

    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의 사이클의 길이를 구하는 프로그램을 작성하시오.


    2. 입력

    첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

    26
    55
    1
    0
    71

    3. 출력

    첫째 줄에 N의 사이클 길이를 출력한다.

    4
    3
    60
    1
    12

    4. 풀이

    일단 이 문제는 특이하게 do-while문을 사용해야 조금 더 코드를 간결하게 만들 수 있다.(아마도 do-while문을 활용하라고 만들어둔 문제이지 않을까 싶다.) 일단 더하기 사이클을 진행하면서 다음 수를 구하는 수식을 짜야한다. 이 더하기한 후 수식과 처음에 입력받은 값을 비교를 해야 하는데 N의 값은 더하기 사이클을 진행하면서 바꿀 것이기 때문에 처음 N 값을 유지하고자 temp라는 변수에 미리 넣어주자. 이때 제일 while문의 탈출문이 temp와 N이 같을 경우인데 이는 처음에 temp에 N값을 넣어주기 때문에 항상 처음에부터 만족을 하여 while문을 실행할 수가 없다. 따라서 do-while문을 통해서 첫 반복문은 실행을 해주고 이후부터 탈출문을 검사하도록 한다.


    5. 소스코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine());
            int temp = N;
            int count = 0;
            do{
                N = (N%10)*10+(N/10+N%10)%10;
                count++;
            }
            while(temp!=N);
            System.out.println(count);
        }
    }

    6. 배운 것

    while문의 조건식이 처음부터 만족하지 않는다 => do-while문 사용.

     

     

    728x90
    반응형