문제 풀이

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

auyeol 2023. 2. 4. 14:10
728x90

 

 

문제

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

N을 입력받았을 때, N의 오른쪽 자리 수와 구한 합의 가장 오른쪽 자리 수를 이어 붙여서 새로운 수를 만든다.

 

새로운 수가 N과 일치해졌을 때까지의 반복 횟수를 구하는 문제이다.

 

------------------------------------------------------------------------------------------------------------------

 

26을 예시로 들면

 

 

1) 각 자리수를 더했을 때  2 + 6 = 8   /  26의 오른쪽 자리 수 6, 구한 합의 가장 오른쪽 자리 수 8을 붙여 68이 된다.

 

2) 반복계산하여                6 + 8 = 14  /  68의 오른쪽 자리 수 8, 구한 합의 가장 오른쪽 자리 수 4를 붙여 84

 

3)                                      8 + 4 = 12  /  84의 오른쪽 자리 수 4, 구한 합의 가장 오른쪽 자리 수 2를 붙여 42

4)                                      4 + 2 = 6   /  42의 오른쪽 자리 수  2, 구한 합의 가장 오른쪽 자리 수 6를 붙여 26

 

26과 같아졌으므로 반복 종료, 반복횟수 4 출력

 

숫자의 오른쪽 자리 수는 항상 새로운 숫자의 십의 자리가 되는 것을 확인할 수 있다.

 

각 자리 수를 더했을 때, 일의 자리만 새로운 숫자의 뒤로 가는 것을 확인할 수 있다. 

 

------------------------------------------------------------------------------------------------------------------

 

 

풀이

 

1) 새로운 숫자를 저장할 x에 n의 값을 복사

 

2) 각 자리의 숫자를 계산해야 하기 때문에 숫자를 분리시켰다.

 

    십의 자리를 구하기 위해 ten = x / 10

    일의 자리를 구하기 위해 one = x % 10 

 

3)일의 자리는 항상 x의 10의 자리에 갔기 때문에  one * 10

 

4) 각 자리수를 더한 값의 일의 자리는 그대로 x의 일의 자리에 들어갔기에 (ten + one) % 10 

 

 > > > x = one * 10 + (ten + one) % 10

 

5) 계산결과를 반복하다 처음 입력받았던 수 n과 x가 일치해지게 되면 반복종료

 

(1) Scanner 사용 

 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt(); // 입력을 받는다.
		int x = n; // n의 값을 복사
		int count = 0; // 사이클 횟수 
		
		while(true) {
			int ten = x/10; // 십의 자리 26 > 2   
			int one = x%10; // 일의 자리 26 > 6 
			
			x = one * 10 + (ten + one) % 10;     //  x =  6  * 10 + (2   +  6 ) % 10 = 68 
			count++;
			
			if(n==x)     // while을 통해 계산을 반복하다가 n과 x가 같아지게 되면 break 
				break;
		}
		System.out.println(count);
		sc.close();
	}
}

 

------------------------------------------------------------------------------------------------------------------

 

 

(2) BufferdReader 사용 

 

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 x = n;
        int count = 0; 
        
        while (true) {
            int ten = x / 10; 
            int one = x % 10; 
 
            x = one * 10 + (ten + one) % 10; 
            
            count++;
 
            if(x == n) break;
           
        }
 
        System.out.println(count);
        
        br.close();
	}
}
728x90