Programming/Algorithm

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

Supreme_YS 2021. 10. 29. 16:30

 

 

1110번: 더하기 사이클

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

www.acmicpc.net

문제 

: 1 <= N <= 99의 두 자리 정수가 주어진다.

: 두 자리 정수의 각 자릿수들을 합한 값의 일의 자리는 새로운 숫자의 일의 자리가 된다.

: 두 자리 정수의 일의 자리는 새로운 숫자의 십의 자리가 된다.

: 이와 같은 더하기 사이클이 원래의 값과 같아질 때의 연산 횟수를 구하라

 

: 26, 2 + 6 = 8 --> 새로운 숫자 : 68, 6 + 8 = 14 --> 새로운 숫자 : 84, 8 + 4 = 12 --> 새로운 숫자 : 42 --> 4 + 2 = 6 --> 새로운 숫자 : 26  

: 연산 횟수 = 4

 

코드

package Step4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class PlusCycle {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int origin = n;
        int cnt = 0;

//        System.out.println( ((n % 10) * 10)); // 일의 자리를 새로운 숫자의 십의 자리로 만듦
//        System.out.println( ((n / 10) + (n % 10) % 10)); // 각 자릿수의 합을 일의 자리로 만듦
//        System.out.println( ((n % 10) * 10) + ((n / 10) + (n % 10))); // 신규 숫자 생성

        while (true) {
            n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10);
            cnt ++;
//            System.out.println(n);
            if (origin == n) {
                break;
            }
        }
        System.out.println(cnt);
    }
}

풀이

: 로직만 이해하면 그렇게 어렵지 않은 문제였다. 일단 배열로 해결하려고 했던 나 자신..반성..생각보다 간단한 수학 연산을 통해 수식만 잘 만들어주면 그렇게 어렵진 않은 문제였던거 같다. 수학적인 규칙을 발견하는 것을 제일 우선순위로 문제를 접근해야겠다. 십의 자리, 일의 자리를 몫과 나머지 연산을 통해 도출해내는 생각을 자연스럽게 할 수 있도록 노력이 필요할듯..