Algorithm/Baekjoon

[Baekjoon] 백준 1110 더하기 사이클 - java

담크 2021. 7. 11. 14:10

오늘은 while문에서 마지막 문제인 더하기 사이클 문제를 정리해보려 합니다.

브론즈 1인 문제인데요 뭔가 수학적으로 접근해서 풀려고 하면 충분히 풀 수 있는 문제라고 생각합니다.

문제는

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.

 


문제풀이

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int first = n;
		int count = 0;
		
		while(true) {
			n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10);
			count++;
			
			if (first == n) {
				break;
			}
		}
		
		System.out.println(count);
	}

}

 

이번 문제의 핵심은 수가 주어질 때 1의 자릿수와 10의 자릿수를 활용하는 문제인데요

문제를 보면 결국은 n의 1의 자릿수는 새로운 수의 10의 자리로 가고,

n의 10의 자리 1의 자릿수를 합한 수의 일의 자릿수는 새로운 수의 1의 자리로 가는 문제입니다..

먼저 처음 n의 1의 자릿수를 구하기 위해 %를 사용했고 다시 10을 곱해서 10의 자리로 만들어줍니다.

이러한 방법으로 새로운 수의 1의 자리를 구합니다.

사이클의 길이를 구해야 하므로 이러한 과정이 반복될 때마다 count에 1씩 추가해주었습니다.

그리고 최종적으로는 맨 처음수와 같을 때까지 사이클을 돌리는 것이므로 맨 처음수를 복사해 first라는 변수를 만들어 if문 안에 넣고 break를 사용해 코딩해주면 됩니다.