Today I Learned

[TIL] 백준 1110 [21-10-31]

목차

TIL

- 백준 1110

 


TIL

 오늘 자소서 준비와 노션 페이지에 정리를 하느라 문제에 투자하는 시간이 적었다. 그러나 여태까지 공부했던 내용을 readme 파일 형태로 깃허브를 설명하거나 해당 파일을 통해 학습했었던 것을 정리하였다. 깃허브 꽃단장을 보니 너무 뿌듯하다. 공부했었던 것을 정리하면서 Spring Posting을 둘러보았는데, 정말.. 열심히했었던 것이 다시끔 느껴지면서, 그 때 했었던 열정으로 다시끔 불타는 것같다. 꾸준히 열심히 해보자~! 

 

백준 1110

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

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 처음엔 재귀적으로 접근하려고 했다가 탈출 조건을 지정하기 까다로웠다. 그래서 while문을 돌려서 재귀적으로 접근할 수 있게 했다. _new함수는 새로운 숫자와 기존의 숫자와의 관계를 바탕으로 새롭게 숫자를 도출해내는 함수이다. while문을 보게 되면 탈출 조건이 될때까지 이 함수를 반복적으로 사용하게 구현한 것을 볼 수 있다. while문 안에 조건이 들어맞게 하기위해(input_num의 범위는 0~99) num을 -1로 하여 무조건 while문안에 들 수 있게 하였다. 그리고 초기 설정값이 cnt = 0 으로 설정하였기 때문에 while문 안의 if문은 무조건 맞게 되고 한번만 조건이 만족하게 된다. 아래에 cnt += 1이 있기 때문!

 num = _new(num) 이 줄이 while문을 돌며 마치 재귀적으로 호출되는 역할을 한다. 그리고 _input_num != num 조건을 계속 비교하게 된다!! 이런식으로 문제를 해결했다.

 

_input_num = int(input())

cnt = 0
new_num = 0

# new_num = 10 * (num % 10) + (int(num / 10) + int(num % 10)) % 10


def _new(nb):
    _new_nb = 10 * (nb % 10) + (int(nb / 10) + int(nb % 10)) % 10
    return _new_nb


num = -1
while _input_num != num:
    if cnt == 0:
        num = _input_num
    num = _new(num)
    cnt += 1

print(cnt)

문제 풀이 시간 24분 32초