본문 바로가기

알고리즘/백준

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

반응형

안녕하세요. pitang입니다.

백준 1110번 더하기 사이클 문제를 풀어보도록 하겠습니다.

 

1110번 더하기 사이클

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

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

 

예제 입력 예제 출력
26 4
55 3
1 60
0 1
71 12

-> 새로운 수를 만들어 내는 알고리즘을 생각하는게 1순위라고 생각했다.


풀이
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 cnt = 0;
		int copy = N;
		
		// do-while문 사용
		do {	
			// N의 일의 자릿수는 새로운 수의 십의 자릿수로
            // N의 각 자릿수의 합의 일의 자릿수가 새로운 수의 일의 자릿수로
            // 위 두개의 값을 더하면 새로운 수가 된다.
			N = ((N % 10) * 10) + (((N/10) + (N%10)) % 10);
            
			cnt++;
			
		} while (copy != N);
		
		System.out.println(cnt);
		
		br.close();
	}
	
}

-> do-while문을 사용하는 이유는 꼭 한번은 실행한 후, 조건 검사를 해야 하기 때문에 do-while문을 선택하였다.

 

 

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

728x90
반응형