이번에는 머릿속으로 어떻게 해야될지 그려졌지만, 과정이 조금 복잡할 수 있다고 생각했다. 일단 내가 짜서 통과한 코드는 다음과 같다:
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
인터넷의 다른 개발자는 위와 같이 풀었다. 비슷하게 했으나 나와는 다르게 몫(//)과 나머지(%)의 방식을 이용하여 풀었다.
아직도 갈 길이 멀다고 느낀다. 특히 이런 문제에서 나머지를 이용한 풀이를 잘 생각 못하는 경향이 있는 것 같다. 계속 새로운 시도를 하면서 실력을 늘릴 수 있어야 할 것 같다
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 2562번> 파이썬 - 최댓값 (0) | 2020.11.03 |
---|---|
<백준 문제풀이: 10818번> 파이썬 - 최소, 최대 (0) | 2020.11.02 |
<백준 문제풀이: 10951번> 파이썬 - A+B-4 (0) | 2020.10.27 |
<백준 문제풀이: 10952번> 파이썬 - A+B-5 (0) | 2020.10.27 |
<백준 문제풀이: 1003번> 피보나치 함수 (0) | 2020.10.26 |