문제
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
N을 입력받았을 때, N의 오른쪽 자리 수와 구한 합의 가장 오른쪽 자리 수를 이어 붙여서 새로운 수를 만든다.
새로운 수가 N과 일치해졌을 때까지의 반복 횟수를 구하는 문제이다.
------------------------------------------------------------------------------------------------------------------
26을 예시로 들면
1) 각 자리수를 더했을 때 2 + 6 = 8 / 26의 오른쪽 자리 수 6, 구한 합의 가장 오른쪽 자리 수 8을 붙여 68이 된다.
2) 반복계산하여 6 + 8 = 14 / 68의 오른쪽 자리 수 8, 구한 합의 가장 오른쪽 자리 수 4를 붙여 84
3) 8 + 4 = 12 / 84의 오른쪽 자리 수 4, 구한 합의 가장 오른쪽 자리 수 2를 붙여 42
4) 4 + 2 = 6 / 42의 오른쪽 자리 수 2, 구한 합의 가장 오른쪽 자리 수 6를 붙여 26
26과 같아졌으므로 반복 종료, 반복횟수 4 출력
숫자의 오른쪽 자리 수는 항상 새로운 숫자의 십의 자리가 되는 것을 확인할 수 있다.
각 자리 수를 더했을 때, 일의 자리만 새로운 숫자의 뒤로 가는 것을 확인할 수 있다.
------------------------------------------------------------------------------------------------------------------
풀이
1) 새로운 숫자를 저장할 x에 n의 값을 복사
2) 각 자리의 숫자를 계산해야 하기 때문에 숫자를 분리시켰다.
십의 자리를 구하기 위해 ten = x / 10
일의 자리를 구하기 위해 one = x % 10
3)일의 자리는 항상 x의 10의 자리에 갔기 때문에 one * 10
4) 각 자리수를 더한 값의 일의 자리는 그대로 x의 일의 자리에 들어갔기에 (ten + one) % 10
> > > x = one * 10 + (ten + one) % 10
5) 계산결과를 반복하다 처음 입력받았던 수 n과 x가 일치해지게 되면 반복종료
(1) Scanner 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 입력을 받는다.
int x = n; // n의 값을 복사
int count = 0; // 사이클 횟수
while(true) {
int ten = x/10; // 십의 자리 26 > 2
int one = x%10; // 일의 자리 26 > 6
x = one * 10 + (ten + one) % 10; // x = 6 * 10 + (2 + 6 ) % 10 = 68
count++;
if(n==x) // while을 통해 계산을 반복하다가 n과 x가 같아지게 되면 break
break;
}
System.out.println(count);
sc.close();
}
}
------------------------------------------------------------------------------------------------------------------
(2) BufferdReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int x = n;
int count = 0;
while (true) {
int ten = x / 10;
int one = x % 10;
x = one * 10 + (ten + one) % 10;
count++;
if(x == n) break;
}
System.out.println(count);
br.close();
}
}
'문제 풀이' 카테고리의 다른 글
[백준] 10871번: X보다 작은 수 - JAVA (자바) (0) | 2023.02.10 |
---|---|
[백준] 10807번: 개수 세기 - JAVA (자바) (0) | 2023.02.06 |
[백준] 10951번: A+B - 4 - JAVA (자바) (0) | 2023.02.02 |
[백준] 10952번: A+B - 5 - JAVA (자바) (0) | 2023.02.02 |
[백준] 2439번: 별 찍기 - 2 - JAVA (자바) (0) | 2023.01.31 |