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));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int number = N;
int cycle = 0;
while (true) {
N = (((N / 10) + (N % 10)) % 10) + ((N % 10) * 10);
cycle++;
if (number == N) break;
}
System.out.println(cycle);
}
}
로직으로만 보면 간단하다.
결국 처음에 입력한 값이 연산 후의 값이랑 같을 때 까지의 연산횟수를 출력하는 문제이다.
조건을 분석해보면
1. 입력받은 수의 일의자리가 새로운 수의 십의자리가 된다.
2. 입력받은 수의 십의자리와 일의자리를 더한 결과의 일의자리가 새로운 수의 일의 자리가 된다.
1번 조건은 결국 입력받은 값에서 10으로 나눈 나머지에 10을 곱한
(N % 10) * 10
인 것이고
2번 조건은 입력받은 수의 십의자리와 일의자리를 더해야하는데
십의자리는 n을 10으로 나눈 몫 (N / 10)
이고
일의자리는 n을 10으로 나눈 나머지 (N % 10)
이다.
입력받은 수가 10이하여도 결국 십의자리는 0이므로 별도의 조건이 필요없다.
그리고 이를 더한 결과의 일의자리를 구해야하므로 10으로 나눈 나머지의 값인
(((N / 10) + (N % 10)) % 10)
이 새로운 수의 일의 자리가 된다.
1번조건과 2번조건의 값을 더한 결과가 새로운 수가 되고 이를 처음에 입력받은 값과 비교하여 같아질 때까지 해당 조건을 반복실행하면 되는 것이다. 😁