나의 풀이
어려웠다. 푸는 시간을 정확히 계산해 보진 않았지만 2시간 정도 걸렸던 것 같다. 자료형을 원하는대로 변환시켜 주어진 연산을 잘 수행할 수 있느냐가 가장 중요했다고 생각한다. 아직 다른 사람의 풀이를 보지 않았지만 나는 다음과 같이 풀었다.
- Scanner로 입력값을 '문자열'로 받고 분리하고 정수로 바꾼다.
- 정수로 바꾼 값을 더한 다음, 그것의 일의 자리를 숫자를 문자열로 바꾼다.
- 2번의 숫자를 이전의 입력값의 오른쪽 숫자와 결합한다.
- 이 과정을 반복하여 첫 입력값과 똑같이 나올 때까지 반복한 횟수를 출력한다.
주의해야 했던 점은 일의 자리 숫자가 입력되거나 결합했을 때 '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
다른 사람 풀이
'프로그래밍-학습기록 > 코딩테스트' 카테고리의 다른 글
백준 온라인 저지 | 5543 | 실습: 상근날드 (0) | 2020.07.20 |
---|---|
백준 온라인 저지 | 10039 | 실습: 평균점수 (0) | 2020.07.19 |
백준 온라인 저지 | 10951 | while문: A + B - 4 (0) | 2020.07.16 |
백준 온라인 저지 | 10952 | while문: A+B - 5 (0) | 2020.07.15 |
백준 온라인 저지 | 2439 | 별 찍기 - 2 (0) | 2020.07.14 |