프로그래밍-학습기록/코딩테스트

백준 온라인 저지 | 1110 | while문: 더하기 사이클

leesche 2020. 7. 18. 01:21

나의 풀이

어려웠다. 푸는 시간을 정확히 계산해 보진 않았지만 2시간 정도 걸렸던 것 같다. 자료형을 원하는대로 변환시켜 주어진 연산을 잘 수행할 수 있느냐가 가장 중요했다고 생각한다. 아직 다른 사람의 풀이를 보지 않았지만 나는 다음과 같이 풀었다.

  1. Scanner로 입력값을 '문자열'로 받고 분리하고 정수로 바꾼다.
  2. 정수로 바꾼 값을 더한 다음, 그것의 일의 자리를 숫자를 문자열로 바꾼다.
  3. 2번의 숫자를 이전의 입력값의 오른쪽 숫자와 결합한다.
  4. 이 과정을 반복하여 첫 입력값과 똑같이 나올 때까지 반복한 횟수를 출력한다.

주의해야 했던 점은 일의 자리 숫자가 입력되거나 결합했을 때 '01', '03' 같이 십의 자리에 '0'이 오는 경우였다.
일의 자리 숫자가 입력되면 앞 자리에 '0'을 붙이는 공정을 거쳐야 했고, 결합했을 때 십의 자리에 0이 오면 2번의 숫자가 결과 숫자가 되게 했다.

import java.util.Scanner;

public class Bj_1110 {

	public static void main(String[] args) { 
		Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String char0;
        String char1;
        int int0;
        int int1;
        int sumEach = 0;
        String newDigit = str;
        int count = 0;
        
        do{
        	if(newDigit.length()==1) { // 첫 입력 값이 한 자리일 떄
            	newDigit = "0".concat(newDigit);
            }
        	
            char0 = Character.toString(newDigit.charAt(0));
            char1 = Character.toString(newDigit.charAt(1));
            int0 = Integer.parseInt(char0);
            int1 = Integer.parseInt(char1);
            
            sumEach = int0 + int1;
            
            if(int1==0) { // '3''0' -> '3'
            	newDigit = char0;
            }
            else if(sumEach >= 10) { // '3''9' -> '9''2'
            	newDigit = char1.concat(Integer.toString(sumEach % 10));
            }
            else { // '3''1' -> '1''4'
            	newDigit = char1.concat(Integer.toString(sumEach));
            }
            count++;
            // System.out.println("newDigit= "+newDigit+" count= "+count);
        }while(!str.equals(newDigit));
        
        System.out.print(count);
	}
}

 예를 들어, 1을 입력하면 다음과 같이 숫자가 변환된다.

1
newDigit= 11 count= 1
newDigit= 12 count= 2
newDigit= 23 count= 3
newDigit= 35 count= 4
newDigit= 58 count= 5
newDigit= 83 count= 6
newDigit= 31 count= 7
newDigit= 14 count= 8
newDigit= 45 count= 9
newDigit= 59 count= 10
newDigit= 94 count= 11
newDigit= 43 count= 12
newDigit= 37 count= 13
newDigit= 70 count= 14
newDigit= 7 count= 15
newDigit= 77 count= 16
newDigit= 74 count= 17
newDigit= 41 count= 18
newDigit= 15 count= 19
newDigit= 56 count= 20
newDigit= 61 count= 21
newDigit= 17 count= 22
newDigit= 78 count= 23
newDigit= 85 count= 24
newDigit= 53 count= 25
newDigit= 38 count= 26
newDigit= 81 count= 27
newDigit= 19 count= 28
newDigit= 90 count= 29
newDigit= 9 count= 30
newDigit= 99 count= 31
newDigit= 98 count= 32
newDigit= 87 count= 33
newDigit= 75 count= 34
newDigit= 52 count= 35
newDigit= 27 count= 36
newDigit= 79 count= 37
newDigit= 96 count= 38
newDigit= 65 count= 39
newDigit= 51 count= 40
newDigit= 16 count= 41
newDigit= 67 count= 42
newDigit= 73 count= 43
newDigit= 30 count= 44
newDigit= 3 count= 45
newDigit= 33 count= 46
newDigit= 36 count= 47
newDigit= 69 count= 48
newDigit= 95 count= 49
newDigit= 54 count= 50
newDigit= 49 count= 51
newDigit= 93 count= 52
newDigit= 32 count= 53
newDigit= 25 count= 54
newDigit= 57 count= 55
newDigit= 72 count= 56
newDigit= 29 count= 57
newDigit= 91 count= 58
newDigit= 10 count= 59
newDigit= 1 count= 60
60

 다른 사람 풀이