import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int result = N;
int count = 0;
while(true) {
N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
count++;
if(N == result) {
System.out.println(count);
break;
}
}
}
}
설명
위 문제는 두 자릿수의 각 자리의 숫자를 더한 뒤 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자릿수를 이어 붙인 뒤 새로운 수를 만들어서 다시 처음의 수로 돌아오는 횟수를 구하는 문제이다. 먼저 사용자에게 Scanner를 통해 정수를 입력받은 뒤, 처음 입력받은 수를 result에 저장해준다. 그 후 사이클 길이를 구하기 위해 count라는 변수를 0으로 초기화해주고, 반복문으로 자릿수를 더하여 새로운 수를 만드는 코드를 작성해준다.
새로운 수의 왼쪽에 오는 수(십의 자리)는 주어진 수의 오른쪽 자리 수이기 때문에 일의 자리를 구한 뒤 10을 곱해주면 새로운 수의 왼쪽에 수가 위치하게 된다. 다음으로, 새로운 수의 오른쪽 자리(일의 자리)는 기존 숫자의 각 자리를 더해주어야 하기 때문에 10으로 나누어 십의 자리 수와 10으로 나머지 계산을 한 일의 자리 수를 더하면 새로운 수를 만들 수 있다. 이 새로운 수의 일의 자리를 구해야 하므로 다시 10으로 나머지를 한 뒤 더해주면 새로운 수가 만들어진다.
위의 반복문이 실행될 때마다 count를 늘려주고, if문을 통해 처음값을 저장해둔 result값과 새로 구한 N을 비교해주어 같으면 출력하고 반복문이 끝날 수 있도록 break를 사용해준다.