문제
나의 접근 방법
1. 처음 수(N)의 10의 자리와 1의 자리는 10으로 나눈 몫과 나머지이다.
2. 몫과 나머지의 합은 새로운 수의 1의 자리이다.
3. 처음 수(N)의 나머지 값이 새로운 수(M)의 10의 자리이다.
4. 이러한 사이클을 체크하는 카운트 변수(CNT)가 필요하다.
정리하면 아래와 같은 수식이 완성된다.
M = ( (N%10)*10 ) + ( ((N/10) + (N%10))%10 );
주의할 점은 필자는 M을 새로운 수로 두었는데, 실제 반복문 안에서 처음 수(N)를 계속 새로운 값으로 대체하는 것이라 M을 N으로 고친다.
while(true){
M = ( (N%10)*10 ) + ( ((N/10) + (N%10))%10 );
}
어렵게 느껴질 수 있지만, 생각해보면 그렇게 어려운 문제가 아니다.
풀이
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 시작하는 숫자
int n = Integer.parseInt(br.readLine());
// 새로운 숫자이지만 결국 n이 대체되는 것이므로 m=n
int m = n;
// 카운트
int cnt = 0;
while(true) {
n = ((n%10)*10) + (((n/10)+(n%10))%10);
cnt++;
if(n == m) {
break;
}
}
System.out.print(cnt);
}
}
'코딩테스트' 카테고리의 다른 글
[백준/JAVA] 2562 최댓값 (0) | 2021.04.28 |
---|---|
[백준/JAVA] 10818 최소, 최대 (0) | 2021.04.28 |
[백준/JAVA] 11021 A+B-7 (StringTokenizer) (0) | 2021.04.27 |
[백준/JAVA] 2741 N찍기 (0) | 2021.04.27 |