Problem Solving

[백준/Java] 1110번 - 더하기 사이클

Jintiago 2022. 3. 26. 21:50

미치는 줄 알았다. 알고리즘과 수식에는 아무 문제가 없는데 계속 틀렸다니, 멘탈을 거의 놓기 직전까지 갔다.

 

문제는 이렇다.

 

예를 들어 숫자 26이 주어지면 이 수의 1의 자리인 6과, 2와 6을 더한 수인 8을 합쳐 68을 만든다. 이것이 한 사이클이다. 새로 얻은 수로 이 과정을 몇 번 반복해야 처음 주어진 수와 같은 수가 나오는 지 구하는 문제이다.

 

문제풀이 질문란에 보니 많은 사람들은 받은 수를 문자열배열에 집어넣어 인덱스로 접근한 다음 정수로 변환하여 푸는 듯 했다.

 

나는 더욱 간단하게 몫/나머지 연산자를 이용했다.

 

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(br.readLine());
        int copy = N; // 처음 입력된 수 복사
        int count = 0; // 횟수 세기 위한 변수
        
        
        while (true) {
            N = (((N%10)*10) + (((N/10) + (N%10))%10));
            // 주어진 수의 1의 자리를 10의 자리로(10을 곱해서)
            // 주어진 수의 1의 자리, 10의 자리를 합한 값의 1의 자리
            count++; // 1 사이클 증가
            
            if (N == copy) {
                break; // 결과값이 원래 수와 같으면 반복문 탈출
            }
        }
        
        bw.write(count); // 출력
        br.close();
        bw.close();
    }
}

이랬는데 계속 틀렸단다!! 

 

한 시간 이상을 계속 헤멨다.

 

혹시 내가 메소드를 잘못 썼나?? 싶어서 출력을 System.out.println() 메소드로 바꿔서 해 보았다.

 

그 결과

드디어 맞았다...

 

System.out.println() 메소드는 출력이 끝나면 자동으로 줄을 바꾸는데, 혹시 BufferedWriter 클래스의 write() 메소드를 쓸 때 줄바꿈을 안 넣어서 그랬나?? 하고 줄바꿈 이스케이프 시퀀스(\n)를 추가했더니

 

맞았다...

이것 때문에 틀린 것이었다...

 

이 조그만 것 하나 때문에 장장 한시간을 고뇌했다니 참 허무하다.

한 시간 들인 것에 비하면 아무것도 아닌 것 같지만, 어쨌든 이렇게 배웠으니 앞으로는 같은 실수는 하지 않겠지 뭐