문제
: 1 <= N <= 99의 두 자리 정수가 주어진다.
: 두 자리 정수의 각 자릿수들을 합한 값의 일의 자리는 새로운 숫자의 일의 자리가 된다.
: 두 자리 정수의 일의 자리는 새로운 숫자의 십의 자리가 된다.
: 이와 같은 더하기 사이클이 원래의 값과 같아질 때의 연산 횟수를 구하라
예
: 26, 2 + 6 = 8 --> 새로운 숫자 : 68, 6 + 8 = 14 --> 새로운 숫자 : 84, 8 + 4 = 12 --> 새로운 숫자 : 42 --> 4 + 2 = 6 --> 새로운 숫자 : 26
: 연산 횟수 = 4
코드
package Step4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class PlusCycle {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int origin = n;
int cnt = 0;
// System.out.println( ((n % 10) * 10)); // 일의 자리를 새로운 숫자의 십의 자리로 만듦
// System.out.println( ((n / 10) + (n % 10) % 10)); // 각 자릿수의 합을 일의 자리로 만듦
// System.out.println( ((n % 10) * 10) + ((n / 10) + (n % 10))); // 신규 숫자 생성
while (true) {
n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10);
cnt ++;
// System.out.println(n);
if (origin == n) {
break;
}
}
System.out.println(cnt);
}
}
풀이
: 로직만 이해하면 그렇게 어렵지 않은 문제였다. 일단 배열로 해결하려고 했던 나 자신..반성..생각보다 간단한 수학 연산을 통해 수식만 잘 만들어주면 그렇게 어렵진 않은 문제였던거 같다. 수학적인 규칙을 발견하는 것을 제일 우선순위로 문제를 접근해야겠다. 십의 자리, 일의 자리를 몫과 나머지 연산을 통해 도출해내는 생각을 자연스럽게 할 수 있도록 노력이 필요할듯..
'Programming > Algorithm' 카테고리의 다른 글
[백준] 7568번 : 덩치 (Java) (0) | 2021.11.16 |
---|---|
빅오 표기법(Big-O notation), 시간복잡도, 공간복잡도 (0) | 2021.11.08 |
[백준] 팩토리얼 (0) | 2021.10.28 |
[백준] 2434번 : 별 찍기 - 1 (0) | 2021.10.27 |
[백준] 3052번 : 나머지 (Java) (0) | 2021.10.27 |