알고리즘/문제풀이 - 백준
[백준 1110번] 더하기 사이클(JAVA)
DJDU
2022. 11. 2. 23:12

서론
'시간 초과' 때문에 여러 번 통과를 못 했던 문제, 단순 계산 실수 때문이었다.
시행착오(Trial&Error)

51251405, ... - 시간 초과
알고 보니, 계산 실수로 인한 '시간 초과'였다.
풀이(Solution)
BufferedReader & BufferedWriter 사용했다.
일단 조건식에 부합하는지 관계 없이 반복문을 실행하고 조건에 따라 반복문을 실행하는 do_while문 사용했다.
문제 중
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
이 문장을 식으로 작성 할 수 있으면 문제를 풀 수 있다.
26을 2 + 6으로 나누려면 20과 6으로 나눌 수 있는데,
26에서 십의 자리 20에 대해 '나누기 10 곱하기 10'을 하면 일의 자리 버림 처리를 할 수 있다.
26에서 일의 자리 6에 대해 나머지 연산자'%'를 이용하면 쉽게 일의 자리를 구할 수 있다.
count라는 변수를 사용해서, 해당 연산을 몇번 반복했는지 구할 수 있다. 반복문 실행마다 단항 연산자++를 사용하여 count++처리를
반복문 마지막에 수행한다.
코드
import java.io.*;
class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int a = 0;
int b = 0;
int c = 0;
int d = N;
int count = 0;
do {
a = d / 10;
b = d % 10;
c = a + b;
d = (b * 10) + (c % 10);
count++;
} while(N != d);
bw.write(count + "\n");
br.close();
bw.close();
} catch(IOException e) {}
}
}