728x90
https://www.acmicpc.net/problem/1110
풀이 방법
분명히 백준 쉬운 문제 라고 검색해서 찾아서 풀었는데...생각보다 오래걸렸던 문제였다.
그렇다고 어려운 문제는 아니고 다소 생각을 해야했던 문제
이 문제의 핵심 포인트는 아래와 같다.
1. 입력받는 n 이 10 보다 작다면 '뒤' 가 아닌 '앞' 에 0 을 붙여서 2자리로 만드는 것!! => 이 조건 때문에 크기가 2인 배열을 만들어서 문제를 풀었다.
2. 계산해서 만들어진 새로운 수의 각 자리수를 합했을 때 다시 10 보다 작다면 해당 숫자가 바로 새로운 수의 일의 자리가 된다. 만약 새로운 수의 각 자리수를 합했을 때 10보다 크다면 새로운 수의 일의 자리가 새로 만들어지는 수의 일의 자리가 된다.
=> 즉 각 자리수의 합 c 가 있다면 c 가 10보다 작다면 c 는 이후 새로 만들어지는 수 m 의 일의 자리가 된다. 이때 c 가 10 보다 크다면 c 의 일의 자리를 계산한 후 이 숫자를 다시 m 의 일의 자리에 넣어야 한다. 나는 이때 중간에 일의 자리에 대한 변수를 r 로 설정해두었다.
사실 말이 복잡하지 실제로 코드를 보고 코드 주석을 보면 오히려 이해가 쉬울 것이라고 생각된다.
package baekJoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// https://www.acmicpc.net/problem/1110
public class Quiz_1110 {
static int n, k;
static int m = 987654321;
// 배열을 활용해서 풀이 => 십의자리 index = 0, 일의 자리 index=1
static int[] num = new int[2];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
k = n;
int cnt = 0;
// m 이 n 과 일치하면 while 문 종료
// 일치하지 않으면 계속 반복
while (m != n) {
// 10보다 작은 경우 앞에 0 을 붙여서 2자리 숫자로 만든다
if (k < 10) {
num[0] = 0;
num[1] = k;
}else{
// String.valueOf(k).charAt(0) 를 사용하면 반환되는 값은 char 를 int 로 바꾼 아스키 코드 값이
// 나오기 때문에 이를 다시 숫자로 고치기 위해 -48 을 계산한다.
num[0] = String.valueOf(k).charAt(0)-48;
num[1] = String.valueOf(k).charAt(1)-48;
}
// 일의자리와 십의 자리를 더해서 만들어진 수 c
int c = num[0]+num[1];
int r; // 덧셈해서 만들어진 수의 일의 자리
if (c < 10) { // c가 10보다 작으면 r 에는 c 를 그대로 대입
r = c;
}else{ // 아니면 1의 자리 숫자르 가져옴
r = String.valueOf(c).charAt(1)-48;
}
// 만들어진 새로운 수 m
m = num[1]*10+r;
k = m;
// System.out.println("a : " + a);
// System.out.println("b : " + b);
// System.out.println("c : " + c);
// System.out.println("m : " + m);
// 몇번째 사이클인지 cnt
cnt++;
}
System.out.println(cnt);
}
}
'Java - 알고리즘' 카테고리의 다른 글
백준 - 1057 토너먼트 (0) | 2022.09.27 |
---|---|
LIS - 최장 증가 부분 수열 알아보기 (0) | 2022.09.24 |
백준 - 1389 케빈 베이컨의 6단계 법칙 (0) | 2022.09.13 |
백준 - 11404 플로이드(feat.플로이드 와샬 알고리즘) (0) | 2022.09.12 |
백준 - 10282 해킹 (0) | 2022.09.11 |
댓글