본문 바로가기
백준

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

by Hongwoo 2022. 7. 6.
반응형

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1110번 더하기 사이클은 브론즈 1 난이도의 수학 및 구현 문제이다. 이 문제에서는 0보다 크거나 같고 100보다 작은 정수 n이 주어진다. 그리고 n이 10보다 작으면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 그리고 이러한 방법으로 계속해서 새로운 수를 만들 때, 몇 번을 거쳐야 원래 수로 돌아오는지를 출력하면 되는 문제이다.

 

예를 보면서 설명하는 게 더 빠르니 예시를 한번 보겠다. 

 

EX 1) n = 26

우선 각 자리의 수를 더한다. 2 + 6 = 8이다.

그리고 주어진 수의 가장 오른쪽 자리 수와 구한 합의 가장 오른쪽 자리 수를 이어 붙인다. 즉, 주어진 수 26의 오른쪽 자리 수인 6과 합의 가장 오른쪽 자리 수 8을 이어 붙이면 68이 된다. 이게 새로운 수가 된다. 

 

이 과정을 몇 번을 거쳐야 원래 수로 돌아오는지를 구해야 한다.

 

이제는 10보다 작은 수의 예시를 한번 보겠다.

 

EX 2) n = 8

우선 앞에 0을 붙여 두 자리 수로 만든다. 그럼 08이 된다. 그리고 각 자리의 수를 더한다. 즉, 원래의 수 8이 된다. 그리고 주어진 수의 오른쪽 자리 8과 합의 오른쪽 자리인 8을 이어 붙인다. 그러면 88이 된다.

 

여기서 보면 알겠지만 10보다 작은 1의 자리 수가 주어졌을 때는 (n × 10) + n이 새로운  수가 된다.

 

이 문제는 이러한 방식을 while-loop으로 풀 면 된다.

 

코드를 구현하기 더 편하게 한번 적어보겠다.

 

case 1 : n < 10

n < 10보다 작으면 새로운 수 newN = n × 10 + n이 된다.

 

case 2 : n ≥ 10

n이 10보다 크거나 같으면 처음에는 각 자리의 수를 더해야 한다. 즉, (n / 10) + (n % 10)이다. 이러면 10의 자리 수와 1의 자리 수를 더한 것과 같다.

 

그리고 원래 수의 오른쪽 자리와 합의 오른쪽 자리를 이어 붙인 수가 새로운 수가 된다. 수학적으로 표현해 보면 다음과 같다.

 

원래 수의 오른쪽 자리는 n % 10이고 합의 오른쪽 자리는 ((n / 10) + (n % 10)) % 10이다. 

 

이 2개의 수를 이어 붙인다는 것은 다음과 같다.

 

즉, 새로운 수 newN = (n % 10) × 10 + ((n / 10) + (n % 10)) % 10이 된다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
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());
        if (n == 0) {
            System.out.print(1);
            return;
        }
        int ans = n;
        int newN = 0;
        int count = 0;
        while (newN != n) {
            newN = ans;
            count++;
            if (n < 10) {
                n = n*10 + n;
            } else {
                n = (n%10)*10 + ((n%10)+(n/10))%10;
            }
        }

        System.out.print(count);
    }
}

 

반응형

댓글