[백준] 1110 더하기 사이클

J. Hwang·2024년 9월 25일
0

coding test

목록 보기
24/108

문제

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의 사이클 길이를 출력한다.


내 풀이

def plus_cycle(int1):    # int1 in str
    if int(int1) < 10:
        step1 = int(int1)
    else:
        step1 = eval(int1[0]+'+'+int1[1])

    step2 = int1[-1]+str(step1)[-1]
    return step2     # str

num = input()
num1 = int(num)
i = 0
while i < 1000000:
    num = plus_cycle(num)
    if int(num) == num1:
        break
    i += 1

print(i+1)

코멘트

생각보다 규칙을 파악하기 헷갈리는 문제였다. 손으로 계산해보고 나서야 이런 식이구나 싶었다.
숫자를 쪼개서 더하는 연산을 구현해야 해서 구현도 생각보다 까다로웠다.
한 번에 정답처리 되기는 했지만 숫자를 임의로 크게 정해서 반복문을 돌리는 게 깔끔하지 않다 싶어서 공부해보니 while True: 로 돌릴 수도 있다는 것을 배웠다.

num = input()
num1 = int(num)
i = 0
while True:
    num = plus_cycle(num)
    if int(num)==num1:
        break
    i += 1

print(i+1)

다만 딱히 메모리나 소요 시간이 적게 걸리거나 하지는 않음ㅎ


References

https://www.acmicpc.net/problem/1110

profile
Let it code

0개의 댓글