-
[백준] 1110번 더하기 사이클스터디플래너/공부하기 2022. 2. 3. 22:38
요새 백준 단계별로 풀어보기를 이용하여 단계별로 문제를 풀고있다. 목표는 빠르게 기본수학까지 끝내고 알고리즘 부분을 풀면서 실력을 쌓는게 목표이다. 여태까지는 어려워봤자 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를 따로 둘 필요가 없어서 수정했다. 당연히 수정한 코드가 메모리도 덜 사용하고 시간도 더 빠를거라 생각했는데 막상 돌려보니 정반대이다. 왜일까(먼산)?
암튼 이 코드에 대해 느낌을 적다보니 새로운 방법이 생각나고 하는 걸 보면 정말 하나의 문제를 해결하는데 다양한 방법이 있다는 걸 다시금 느낀다. 그 안에서 조금 더 효율적이고 좋은 코드를 작성하는 게 중요하겠지만!
'스터디플래너 > 공부하기' 카테고리의 다른 글
2월 13일 기록 (0) 2022.02.13 [백준] 4344번 평균은 넘겠지 (0) 2022.02.06 [자바의 정석] Chapter06-1. 객체지향 프로그래밍1 (0) 2022.02.03 [Java] 클래스 및 기타 개념 정리 (0) 2022.02.01 [자바의 정석] Chapter05. 배열(Array) (0) 2022.01.30