문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
출력
첫째 줄에 N의 사이클 길이를 출력한다.
예제 입출력
예제 입력 | 예제 출력 |
26 | 4 |
55 | 3 |
1 | 60 |
풀이
while문을 이용해 어떠한 코드를 반복하며 처음 입력한 수와 같아질 때까지 반복한다.
해당 코드는 입력받은 숫자를 10으로 나눈 값과 10으로 나눈 나머지를 더한 뒤 결과에서 일의 자리만 사용하기 위해
10으로 나눈 나머지를 구해주고 원래 숫자에서는 십의 자리를 사용해야 되기 때문에 10으로 나눈 값을 저장해 두 숫자
를 연결해준다(이전 숫자는 다시 10을 곱해주어 일의 자리와 합쳐준다). 이를 계속 반복하여 처음에 입력한 값과 같아
질 때까지 반복한다. 이때 반복 횟수가 결괏값이 되는 것이다.
C
#include <stdio.h>
int main() {
int num; // 입력한 숫자
scanf("%d", &num);
int answer = num; // 새로운 수
int count = 0; // 사이클 길이
int a, b; // 십의 자리와 일의 자리
while (1) { // 무한루프
a = answer / 10; // 새로운 수의 십의 자리
b = answer % 10; // 새로운 수의 일의 자리
int result = a + b; // 결과는 새로운 수의 십의 자리와 일의 자리를 합친 값
answer = b * 10 + result % 10; // 새로운 수 :
// 이전 새로운 수 일의 자리가 십의 자리로 결과의 일의 자리가 일의 자리로
count++;
if (num == answer) // 결과가 처음에 입력한 숫자와 같다면 반복문 탈출
break;
}
printf("%d", count);
}
C++
#include <iostream>
using namespace std;
int main() {
int num; // 입력한 숫자
cin >> num;
int answer = num; // 새로운 수
int count = 0; // 사이클 길이
int a, b; // 십의 자리와 일의 자리
while (1) { // 무한루프
a = answer / 10; // 새로운 수의 십의 자리
b = answer % 10; // 새로운 수의 일의 자리
int result = a + b; // 결과는 새로운 수의 십의 자리와 일의 자리를 합친 값
answer = b * 10 + result % 10; // 새로운 수 :
// 이전 새로운 수 일의 자리가 십의 자리로 결과의 일의 자리가 일의 자리로
count++;
if (num == answer) // 결과가 처음에 입력한 숫자와 같다면 반복문 탈출
break;
}
cout << count;
}
Python
num = int(input()) # 숫자 입력
answer = num
count = 0
while True: // 무한루프
a = answer // 10 # 새로운 수의 십의 자리
b = answer % 10 # 새로운 수의 일의 자리
result = a + b # 결과는 새로운 수의 십의 자리와 일의 자리를 합친 값
answer = (b * 10) + (result % 10) # 새로운 수 :
# 이전 새로운 수 일의 자리가 십의 자리로 결과의 일의 자리가 일의 자리로
count = count + 1
if num == answer: # 결과가 처음에 입력한 숫자와 같다면 반복문 탈출
break
print(count)
'Algorithm' 카테고리의 다른 글
[백준 BOJ] 15721번 번데기 (0) | 2020.10.11 |
---|---|
[백준 BOJ] 17249번 태보태보 총난타 (0) | 2020.10.11 |
[백준 BOJ] 14645번 와이버스 부릉부릉 (0) | 2020.10.11 |
[백준 BOJ] 10951번 A+B - 4 (0) | 2020.09.08 |
[백준 BOJ] 2839번 설탕 배달 (0) | 2020.09.06 |
댓글