알고리즘/문제풀이 - 백준

[백준 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) {}
    }
}