본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1110번 : 더하기 사이클

by hyunipad 2021. 1. 14.
반응형

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

문제 해설

14를 예를 들어보자.

 

1 + 4 = 5이다. 새로운 수는 45이다.

4 + 5 = 9 이다. 새로운 수는 59이다.

5 + 9 = 14 이다. 새로운 수는 94이다.

9 + 4 = 13 이다. 새로운 수는 43이다.

4 + 3 = 7이다. 새로운 수는 37이다.

.

.

.

쭉 해서 다시 14가 나올때까지의 연산의 횟수를 구해야 한다.(일의 자리는 앞에 0을 붙이고 시작)

그렇다면 일의 자리도 한번 해보자.

 

8을 예를 들어보자.

 

0 + 8 = 8 이다. 새로운 수는 88이다.

8 + 8 = 16 이다. 새로운 수는 86이다.

8 + 6 = 14 이다. 새로운 수는 64이다.

6 + 4 = 10 이다. 새로운 수는 40이다.

4 + 0 = 4 이다. 새로운 수는 04이다.

0 + 4 = 4 이다. 새로운 수는 44이다.

4 + 4 = 8 이다. 새로운 수는 48이다.

.

.

규칙

  1. 이전의 새로운 수의 일의자리가 다음 새로운 수의 십의 자리가 된다.(처음 입력받은 수부터 바로 시작)
  2. 이전의 새로운 수의 합의 일의자리가 다음 새로운 수의 일의 자리가 된다.

이 규칙을 코드로 옮겨보자.

해결 방법

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws IOException {			
		// 규칙
		// 1. 이전의 수의 일의 자리가 다음 수의 십의 자리가 된다.
		// 2. 이전의 수의 각 자리의 합의 일의 자리가 다음 수의 일의 자리가 된다.	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int number = Integer.parseInt(br.readLine());
		int next = (number % 10) * 10 + (((number % 10) + (number / 10)) % 10);
		int count = 1;
			
		while(next != number) {
			count++;
			next = (next % 10) * 10 + (((next % 10) + (next / 10)) % 10);	
		}
		bw.write(count + "\n");
		
		br.close();
		bw.flush();
		bw.close();
	}
}

 

반응형

댓글