백준 1110번 파이썬 코드 답안

    문제

    #파이썬 코드 답안

    n = int(input())
    first = n
    
    if(first < 10) :
        first = '0' + str(first)
    
    i = 0
    while True :
        second = int(str(first)[0]) + int(str(first)[1])
        if int(second) < 10 :
            second = '0' + str(second)
        third = str(first)[1] + str(second)[1]
        first = third
        i += 1
        if(int(third) == n ) :
            print(i)
            break


    아직 초보라 그런가.. 푸는데 한참 걸렸다. 알고리즘 짜는 능력이 굉장히 미숙한 것 같다.

    1. 입력 검사문

    if(first < 10) :
        first = '0' + str(first)

    문제에서는 26부터 시작한다고 해서 간과할 수 있는데, 입력 역시 한자리수가 들어올 수가 있다. 이 경우에는 당연히 '0'을 앞에 추가해 두자리 수 인 것처럼 맞추어 주어야 한다.

    2. 전체적인 로직 짜기 및 변수 줄이기

    머리가 나빠서인가... 한참 헤맸다. 나는 다음과 같은 순서대로 해결했다. 다음에 하라고 하면 똑같이 헤맬 듯

    1. 26 (첫번재 값)

    2. 2 + 6 = 08 (중간값)

    3. 68 (세번째값 = 첫번째값 + 중간값)

    4. 6+ 8 = 14 (중간값)

    5. 84 (세번째값 =  첫번째값 + 중간값) 

    위와 같은 식으로 수열이 계속 진행된다고 볼 수 있다. 따라서 첫번째 값에서 중간값을 만들고, 그리고 그 첫번째값과 중간값이 더해져서 세번째 값이 만들어지고, 그런데 그 세번째 값이 그 다음 첫번째값이 되어, 그 다음 세번째값을 만든다. 따라서, 위와 같은 변수가 설정되었다.

    결국, 세번째가 초기 입력값인 n과 같아질 때를 찾는 것이기 때문에 그 때가 되는 값을 찾아서 n을 출력하도록 했다.

    'CS > BOJ' 카테고리의 다른 글

    백준 10871 파이썬 코드 답안  (0) 2021.03.22
    백준 15552번 파이썬 코드  (0) 2021.03.22
    백준 2439번 파이썬 코드  (0) 2021.03.21
    백준 2884번 파이썬 코드 답안  (0) 2021.03.21
    백준 14681번 파이썬 코드  (0) 2021.03.21

    댓글

    Designed by JB FACTORY