알고리즘/백준 알고리즘
[java] 백준 알고리즘 1110번 더하기 사이클 풀이
희랍인 조르바
2018. 5. 17. 15:27
다른 사람들 소스를 보면 다들 쉽게 쉽게 풀었는데,
난 항상 왜 이렇게 어렵게 푸는지 모르겠다. ㅠㅠ
* 풀이소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | public class Baekjoon1110 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String n = br.readLine(); // 입력받을 정수(문제 속의 N) int intN = Integer.parseInt(n); // String으로 받기 때문에 int로 변환된 N int cycle = 0; int newNum = 0; /* 문제처럼 10보다 작으냐 크냐에 계산이 달라진다. */ if(intN<10) { // 10보다 작은 경우, newNum = intN + intN; // 10보다 작을 경우, 사이클 1개는 지나야하며, 사이클 하나가 지난 값은 주어진 n값을 2번 더한 것과 같다. String stringNewNum = String.valueOf(newNum); int firstNum = intN; // 계산 속의 + 연산 사이에 오른쪽에 위치할 수 cycle = 1; // 위의 설명대로 사이클 1개 추가 while(!n.equals(stringNewNum)) { // 입력한 값과 같아질 때까지 loop stringNewNum = String.valueOf(newNum); int secondNum = Integer.parseInt(stringNewNum.substring(stringNewNum.length()-1)); // 사이클 중 계산되고 난 값(= 등호 오른쪽 값)의 오른쪽에 있을 숫자 if(firstNum == 0) { stringNewNum = String.valueOf(secondNum); // 자리수가 1개일 경우에는 그대로 대입. }else { stringNewNum = String.valueOf(firstNum)+String.valueOf(secondNum); // + 연산의 오른쪽 수, 계산된 후의 오른쪽 수를 합친다. } newNum = firstNum + secondNum; // 만들어질 수 firstNum = secondNum; // 등식(=)으로 나온 수의 오른쪽에 있는 수는 다음 사이클에서 + 연산 값의 오른쪽 수가 된다. cycle++; // 1번 연산될 때마다 사이클도 자동 업 } }else { newNum = Character.getNumericValue(n.charAt(0)) + Character.getNumericValue(n.charAt(1)); // 두자릿수라서 바로 계산. String stringNewNum = String.valueOf(newNum); /* 원리는 위와 같다. */ int firstNum = Character.getNumericValue(n.charAt(1)); while(!n.equals(stringNewNum)) { stringNewNum = String.valueOf(newNum); int secondNum = Integer.parseInt(stringNewNum.substring(stringNewNum.length()-1)); stringNewNum = String.valueOf(firstNum)+String.valueOf(secondNum); newNum = firstNum + secondNum; firstNum = secondNum; cycle++; } } bw.write(String.valueOf(cycle)); bw.flush(); } } | cs |