반응형
출처: https://www.acmicpc.net/problem/1110
Approach
0 과 99 사이의 정수가 주어진다.
일의 자리수가 주어지더라도 앞쪽에 '0'을 붙여서 두 자리 취급을 한다.
ex) 8 → 08
결과적으로 두 자리수가 주어지는 것으로 볼 수 있다.
① 10으로 나누었을 때, 왼쪽 자리 숫자가 무엇인지 알 수 있다. → L
② 오른쪽 자리 숫자는 나머지 연산(%)으로 구할 수 있다. → R
③ 새로운 숫자에서 가장 오른쪽 숫자는 → (L + R) % 10 = nR
④ 새로운 숫자는 → (R * 10) + nR 이다.
이 과정을 반복하면서 제일 처음 입력받은 숫자가 몇 회(cycle)만에 나오는지 확인한다.
C++
#include <stdio.h>
int L, R, nR, num, cycle, oldNum;
int main(void)
{
// freopen("input.txt", "r", stdin);
scanf("%d", &oldNum);
num = oldNum;
while (1)
{
L = num / 10;
R = num % 10;
nR = (L + R) % 10; // 앞에서 구한 합의 가장 오른쪽 자리 수
num = (R * 10) + nR; // 새로운 수
cycle++;
if (num == oldNum)
{
printf("%d\n", cycle);
break;
}
}
}
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int cycle = 0;
int temp = n;
int left; // 10의 자리에 해당
int right; // 1의 자리에 해당
// 규칙상 처음 주어진 숫자가 10미만일때만 작동한다!
if(temp < 10) {
left = 0;
right = temp;
temp = (right * 10) + ((left + right)%10);
cycle++;
if(temp == n) { // 숫자 0인 경우!
System.out.println(cycle);
return;
}
}
while(true) {
left = temp / 10;
right = temp % 10;
temp = (right * 10) + ((left + right)%10);
cycle++;
if(temp == n) {
System.out.println(cycle);
return;
}
}
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 9095 1, 2, 3 더하기 (0) | 2021.08.09 |
---|---|
[BOJ] 백준 1024 수열의 합 (0) | 2021.08.07 |
[BOJ] 백준 1977 완전제곱수 (0) | 2021.08.05 |
[BOJ] 백준 1934 최소공배수 (0) | 2021.08.04 |
[BOJ] 백준 13701 중복 제거 (0) | 2021.08.02 |
댓글