[백준] 1110번 더하기 사이클
요새 백준 단계별로 풀어보기를 이용하여 단계별로 문제를 풀고있다. 목표는 빠르게 기본수학까지 끝내고 알고리즘 부분을 풀면서 실력을 쌓는게 목표이다. 여태까지는 어려워봤자 EOF, BufferedReader와 같은 자주 사용하지 않던 개념만 공부하면 풀 수 있었다. 이번엔 근본적으로 문제를 어떻게 풀 것인가 생각해봐야하는 문제들이라 애를 먹었다.
처음엔 혼자서 이리저리 코드를 작성해봤지만 안 풀렸다. 아무리 봐도 그냥 해선 안 될 것 같아서 혼자 순서도도 만들어봤다. 물론 순서도 작성 규칙같은 것과 맞지 않으니 누군가 이 글을 본다면 그냥 지나가줬으면 좋겠다...
그냥 안 풀리면 다른 거 풀면 되는데 내 성격상 도장깨기를 하고 완료 글자를 보지 않으면 마음이 편치 않다. 그래서 퇴근 후 붙잡고 있었다. 입력값을 숫자로 변환하면 앞에 0을 붙이는 게 번거롭고 1의 자릿수를 가져올 때 귀찮을 것 같아서 문자열로 해결을 봤다. 지금 생각해보니 나머지값을 구하면 그렇게 어렵지 않게 구할 수 있을 것 같기도 하고....ㅎ 또 9보다 작거나 같은 경우 if문을 따로 작성하니 반복되어 깔끔하지 않다는 생각이 들었다. 그래서 삼항 연산자로 정리해봤다. 또 char타입을 Character 클래스의 getNumericValue메소드를 이용하여 int타입으로 변환하였다. 처음 써본다. 그리고 입력받을 때 Scanner보다 BufferedReader에 익숙해지기위해 노력하고 있다. 가끔 예외처리해주는걸 까먹지만 그래도 처음에 이게 뭔지도 몰랐을 때에 비하면 많이 익숙해졌다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
input = Integer.parseInt(input)<=9 ? "0" + input : input;
String before = input;
String result;
int cnt = 0;
do{
int sum = Character.getNumericValue(before.charAt(0)) + Character.getNumericValue(before.charAt(1));
String after = sum <= 9 ? "0" + sum : sum + "";
result = before.charAt(1) + "" + after.charAt(1) ;
before = result;
cnt++;
}while ( Integer.parseInt(input)!=Integer.parseInt(result) );
br.close();
System.out.println(cnt);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Problem1110 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
input = Integer.parseInt(input)<=9 ? "0" + input : input;
String before = input;
int cnt = 0;
do{
int sum = Character.getNumericValue(before.charAt(0)) + Character.getNumericValue(before.charAt(1));
String after = sum <= 9 ? "0" + sum : sum + "";
before = before.charAt(1) + "" + after.charAt(1) ;
cnt++;
}while ( Integer.parseInt(input)!=Integer.parseInt(before) );
br.close();
System.out.println(cnt);
}
}
처음엔 위의 코드로 풀었는데 다시 코드를 보니 굳이 result를 따로 둘 필요가 없어서 수정했다. 당연히 수정한 코드가 메모리도 덜 사용하고 시간도 더 빠를거라 생각했는데 막상 돌려보니 정반대이다. 왜일까(먼산)?
암튼 이 코드에 대해 느낌을 적다보니 새로운 방법이 생각나고 하는 걸 보면 정말 하나의 문제를 해결하는데 다양한 방법이 있다는 걸 다시금 느낀다. 그 안에서 조금 더 효율적이고 좋은 코드를 작성하는 게 중요하겠지만!