오늘은 백준 1110번 문제를 풀이하려한다. 사실 코딩 자체는 쉬운데 말이 어려워서..(일부러 어렵게 낸건가..)
그래서 주어진 문제를 내가 조금 정리해봤다.
1. 정수 base가 주어진다. (0 <= base <= 99)2. base가 10보다 작다면, 앞에 0을 붙여 두 자리 수로 만들고,각 자리의 숫자를 더한다.
3. base의 일의 자리 숫자와 앞에서 구한 합의 가장 오른쪽 수를 이어 붙여 새로운 수 calc를 만든다.
4. base와 calc가 같다면 프로세스를 종료시킨다.
이 때, 2번의 앞 내용을 빨간줄로 그어 놓은 이유는 다음과 같다.
한 자리 숫자 1은 01로 쓸 수 있다.
한 자리 숫자 2는 02로 쓸 수 있다.
...
한 자리 숫자 n은 0n으로 쓸 수 있다.
이제 base에 대하여 일의 자리 수와 십의 자리 수를 구할 것인데, 이는 나머지 연산으로 쉽게 구할 수 있다. 본문에 가장 오른쪽 자리 수(일의 자리 수)가 먼저 나왔기 때문에, A를 일의 자리 수, B를 십의 자리 수를 표현하는 데 사용할 것이다.
따라서 A와 B는 다음과 같다.
A = base % 10;
B = base / 10;
이제 이 A와 B를 가지고 새로운 calc를 구할 것인데, 3번을 보면 "일의 자리 숫자와 앞에서 구한 합"을 구해야 한다.
일의 자리 숫자는 A이고, "앞에서 구한 합"은 2번을 보면, "각 자리의 숫자를 더한다"기 때문에, A+B가 된다. 여기에 대하여, 가장 오른쪽 수 즉 일의 자리 수이고, 따라서 calc는 다음과 같다.
calc = A + ( (A+B)%10 );
이 calc를 base와 비교하여 종료하면 된다.
최종 코드
import java.util.Scanner;
public class Number1110 {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
int base = scan.nextInt();
int calc = base;
int A = 0, B = 0;
int repeat = 0;
do{
A = calc % 10;
B = calc / 10;
calc = (A*10)+((A+B)%10);
repeat++;
}while(base != calc);
System.out.println(repeat);
}
}
결과는 정답!
'공부 > 알고리즘' 카테고리의 다른 글
[Java 코딩테스트] 백준 3052 문제풀이 / 배열 나머지 수 구하기 (0) | 2021.07.25 |
---|---|
[Java 코딩테스트] 백준 10818 문제풀이 / 배열 없이 최소 최대 구하기 (0) | 2021.07.22 |
[Java 코딩테스트] 백준 2438 문제풀이 Dynamic Programming (0) | 2021.07.19 |
[Java 코딩테스트] 백준 15552번 문제 풀이 (0) | 2021.07.18 |
[Java 코딩테스트] 백준 2884번 문제풀이 (0) | 2021.07.18 |