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)를 추가했더니
맞았다...
이것 때문에 틀린 것이었다...
이 조그만 것 하나 때문에 장장 한시간을 고뇌했다니 참 허무하다.
한 시간 들인 것에 비하면 아무것도 아닌 것 같지만, 어쨌든 이렇게 배웠으니 앞으로는 같은 실수는 하지 않겠지 뭐