Algorithm

[백준 1110] 더하기 사이클

Mirab 2021. 11. 29. 21:55
문제 풀이

 

주어진 수가 10보다 작으면, 앞에 0을 붙여서 두 자리로 만들고 각 자리의 숫자 합을 구합니다.

주어진 수의 가장 오른쪽 수와 숫자 합의 가장 오른쪽 수를 붙였을 때 주어진 수가 나올 수 있는 사이클 횟수를 구하는 문제입니다. 

 

주어진 수 : 26

26 => 2 + 6 = 8 (숫자의 합)

68 => 6 + 8 = 14

84 => 8 + 4 = 12

42 => 4 + 2 = 6

26 (4번의 사이클 만에 주어진 수가 나오게 됩니다.)

 

가장 오른쪽 수를 구할 수 있는 방법은 10을 모듈러 연산하면 쉽게 구할 수 있습니다.

 

소스 코드
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int n;
	cin >> n;

	int temp = n;
	int a = 0;
	int b = 0;
	int sum = 0;
	int cycle = 0;
	while (true)
	{
		cycle++;

		a = temp / 10;
		b = temp % 10;
		sum = a + b;

		temp = b * 10 + sum % 10;

		if (temp == n)
			break;
	}

	cout << cycle << endl;
	return 0;
}

'Algorithm' 카테고리의 다른 글

[백준 1213] 팰린드롬 만들기  (0) 2021.11.30
[백준 1100] 하얀 칸  (0) 2021.11.30
[백준 2884] 알람 시계  (0) 2021.11.29
[백준 1009] 분산처리  (0) 2021.11.27
[백준 16398] 행성 연결  (0) 2021.11.22