본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1110 더하기 사이클

by 까망 하르방 2021. 8. 6.
반응형

출처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

댓글