반응형
https://www.acmicpc.net/problem/1110
문제 해설
14를 예를 들어보자.
1 + 4 = 5이다. 새로운 수는 45이다.
4 + 5 = 9 이다. 새로운 수는 59이다.
5 + 9 = 14 이다. 새로운 수는 94이다.
9 + 4 = 13 이다. 새로운 수는 43이다.
4 + 3 = 7이다. 새로운 수는 37이다.
.
.
.
쭉 해서 다시 14가 나올때까지의 연산의 횟수를 구해야 한다.(일의 자리는 앞에 0을 붙이고 시작)
그렇다면 일의 자리도 한번 해보자.
8을 예를 들어보자.
0 + 8 = 8 이다. 새로운 수는 88이다.
8 + 8 = 16 이다. 새로운 수는 86이다.
8 + 6 = 14 이다. 새로운 수는 64이다.
6 + 4 = 10 이다. 새로운 수는 40이다.
4 + 0 = 4 이다. 새로운 수는 04이다.
0 + 4 = 4 이다. 새로운 수는 44이다.
4 + 4 = 8 이다. 새로운 수는 48이다.
.
.
.
규칙
- 이전의 새로운 수의 일의자리가 다음 새로운 수의 십의 자리가 된다.(처음 입력받은 수부터 바로 시작)
- 이전의 새로운 수의 합의 일의자리가 다음 새로운 수의 일의 자리가 된다.
이 규칙을 코드로 옮겨보자.
해결 방법
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
// 규칙
// 1. 이전의 수의 일의 자리가 다음 수의 십의 자리가 된다.
// 2. 이전의 수의 각 자리의 합의 일의 자리가 다음 수의 일의 자리가 된다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int number = Integer.parseInt(br.readLine());
int next = (number % 10) * 10 + (((number % 10) + (number / 10)) % 10);
int count = 1;
while(next != number) {
count++;
next = (next % 10) * 10 + (((next % 10) + (next / 10)) % 10);
}
bw.write(count + "\n");
br.close();
bw.flush();
bw.close();
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 2562번 : 최댓값 (0) | 2021.03.02 |
---|---|
[백준 알고리즘][자바] 10818번 : 최소, 최대 (0) | 2021.01.19 |
[백준 알고리즘][자바] 10951번 : A+B - 4 (0) | 2021.01.10 |
[백준 알고리즘][자바] 10952번 : A+B -5 (0) | 2021.01.10 |
[백준 알고리즘][자바] 15552번 : 빠른 A+B (0) | 2021.01.10 |
댓글