문제 보기: https://www.acmicpc.net/problem/1110
문제
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의 사이클 길이를 출력한다.
풀이 과정
최대한 문제의 흐름과 똑같이 작성하려고 생각했다.
문제에서의 규칙을 찾으면 좋겠지만 한번 풀어본 문제이기에 그런 방식이 아닌 온전히 문장에만 집중 했다.
1. 0보다 크거나 같고, 99보다 작거나 같은 정수
2. 10보다 작을때의 조건 : 문자열 두개를 합치는 것
3. 10보다 클때의 조건 중 합이 한 자리 수 일때의 조건과 두 자리 수 일때의 조건
4. 한 사이클을 돌때마다 횟수 count를 1씩 증가 한다. count
5. 새로운 사이클이 돌기전에 제일 처음 들어온 값과 같은지 확인한다 check
6. 합치기전에는 문자형식으로 붙이고 비교를 할때는 정수 형태로 비교한다 str, int
코드
a = int(input())
check = a
count = 0
if 0 <= a <= 99:
while 1:
if a < 10:
a = str(a)
a = a + a
a = int(a)
count += 1
# print(f"1:{a}")
else:
a = str(a)
temp = int(a[0]) + int(a[1])
if temp < 10:
temp = str(temp)
a = a[1] + temp[0]
a = int(a)
count += 1
# print(f"2:{a}")
else:
temp = str(temp)
a = a[1] + temp[1]
a = int(a)
count += 1
# print(f"3:{a}")
if check == a:
print(count)
break
'Algorithm' 카테고리의 다른 글
[백준_4673] 셀프 넘버 (0) | 2022.04.20 |
---|---|
[백준_4344] 평균은 넘겠지 (0) | 2022.04.20 |
[백준_2884] 알람 시계 (0) | 2022.04.18 |
[백준_ 2588] 곱셈 (0) | 2022.04.18 |
[백준_10869] 사칙연산 (0) | 2022.04.18 |