오늘은 while문에서 마지막 문제인 더하기 사이클 문제를 정리해보려 합니다.
브론즈 1인 문제인데요 뭔가 수학적으로 접근해서 풀려고 하면 충분히 풀 수 있는 문제라고 생각합니다.
문제는
https://www.acmicpc.net/problem/1110
여기서 확인하시면 됩니다.
문제풀이
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를 사용해 코딩해주면 됩니다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon] 백준 10951 (A + B - 4) - java (0) | 2021.07.15 |
---|---|
[Baekjoon] 백준 1157 단어공부 - java (0) | 2021.07.12 |
[Baekjoon] 백준 10871 X보다 작은 수 - java (0) | 2021.07.10 |
[Baekjoon] 백준 2884 알람시계 - java (2) | 2021.07.02 |
[Baekjoon] 백준 2439 별찍기 2 - java (0) | 2021.06.29 |