Java/알고리즘 공부
[백준 JAVA] 1110번: 더하기 사이클
O'mil
2023. 1. 31. 10:33
728x90
#1110번: 더하기 사이클
문제
풀이
import java.util.Scanner;
public class Main_1110 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int a, b;
int Sum = 0;
int Sum1 = N; // copy 수
int n = N;
int num = 0; // 사이클 수
if ( n <= 9) {
a = 0;
b = n;
}
else {
a = n / 10;
b = (n % 10) / 1;
}
while (true) {
Sum = a + b;
n = Sum;
num++;
a = b;
b = (Sum % 10) / 1;
Sum1 = 10 * a + b;
if ( Sum1 == N) {
break;
}
}
in.close();
System.out.println(num);
}
}
- Sacnner로 수를 입력 받는다.
- 먼저 if문을 통해 9이하일 때와 10이상 일 때를 나누고 자리수를 분리한다.
- while문을 이용해 두 자리 수를 합하고 합할 때마다 사이클 수를 올린다.
- 그 후 다시 새로 만들어진 숫자를 가지고 다시 자리수를 나누고 이 숫자가 입력받은 수와 같을 시 while문을 종료시킨다.
* 반복문을 while문으로 사용해준 이유는 만족하는 값이 나올 때까지 반복문이 1번 이상 돌아가야 하기 때문이다.
내가 짠 코드보다 더 간단하게 짠 코드가 있을 것 같아 찾아보았다.
더보기
import java.util.Scanner;
public class Main_1110_T {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int num = 0;
int copy = N;
while(true) {
N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
num++;
if (copy == N) {
break;
}
}
in.close();
System.out.println(num);
}
}
[1] (N % 10) * 10 // 기존 수의 일의 자리 수 = 새로운 수의 10의 자리수
[2] (((N / 10) + ( N % 10)) % 10)
1. N / 10 // 기존 수의 10의 자리 수
- 십의 자리가 0이면 0을 아니면 그 자리수를 그대로 반환한다.
2. N % 10 // 기존 수의 일의 자리수
3. (((N / 10) + ( N % 10)) % 10) //새로운 수의 일의 자리 수
- 1 + 2는 기존 수(N)의 십의 자리와 일의자리를 합해준 값이다.
- 합해준 값을 % 10을 해준다면 새로운 수의 일의 자리가 나온다.
[1] + [2]는 새로운 수이다.
- 새로운 수가 생성되면 사이클 수(num)의 숫자를 하나 올려준다.
- 그 후 입력받은 값(copy)과 새로 생성된 수를 비교해 두 수가 같을 시 반복문을 종료한다.
참고)
728x90