출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

이번에는 머릿속으로 어떻게 해야될지 그려졌지만, 과정이 조금 복잡할 수 있다고 생각했다. 일단 내가 짜서 통과한 코드는 다음과 같다:

import sys

N = int(sys.stdin.readline())

result_num = N
count = 0

while True:
    first_num_list = [int(x) for x in str(result_num)]
    first_num = sum(first_num_list)
    result_num_list = [int(x) for x in str(first_num)]
    result_num = (first_num_list[-1])*10 + result_num_list[-1]
    count += 1
    if result_num == N:
        print(count)
        break

 

while문 안을 보면 first_num_list는 result_num을 list로 만들어주는 것이다 (ex. [2, 6]). (처음의 result_num은 N의 값과 동일하다 (ex. result_num = N = 26)) 이후 first_num은 이 list의 합이 되는 것이고 (ex. 8), result_num_list는 이 first_num을 다시 자릿수에 따라 리스트로 만든다. (ex. [0, 8]) 이후 result_num은 이 first_num_list와 result_num_list의 마지막 숫자를 더해주는 방식으로 하면 된다. (ex. 6*10 + 8 = 68)

 

count를 1만큼 더 올려주고, 만약 이 result_num이 N과 같아지는 순간 break해주면서 count를 출력해주면 된다.

 

처음에는 while True가 아닌 N의 값이 result_num과 일정하지 않을 동안만 진행시키고 아니라면 print(count)를 아예 따로 놓으려고 했으나, 그게 힘들고 복잡해서 차라리 while True로 계속 돌려주고, while문 안에 if문을 삽입하여 조금 더 간단하게 만들었다.

 

 

※ 다른 사람의 풀이

num = int(input())
check = num
new_num = 0
temp = 0
count = 0
while True:
    temp = num//10 + num%10
    new_num = (num%10)*10 + temp%10
    count += 1
    num = new_num
    if new_num == check:
        break
print(count)

#https://elrion018.tistory.com/39

인터넷의 다른 개발자는 위와 같이 풀었다. 비슷하게 했으나 나와는 다르게 몫(//)과 나머지(%)의 방식을 이용하여 풀었다.

 

아직도 갈 길이 멀다고 느낀다. 특히 이런 문제에서 나머지를 이용한 풀이를 잘 생각 못하는 경향이 있는 것 같다. 계속 새로운 시도를 하면서 실력을 늘릴 수 있어야 할 것 같다