[PYTHON] 1110 더하기사이클 while

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

     

    1110번: 더하기 사이클

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

    www.acmicpc.net

    문제 풀이

    • N의 일의 자리가 십의 자리가 되고 N의 합의 일의 자리가 일의 자리가 된다.
    • 예를 들어 N = 26이라면
    • N = 26 => 2 + 6 = 8
    • N = 68 => 6 + 8 = 14
    • N = 84 => 8 + 4 = 12
    • N = 42 => 4 + 2 = 6
    • N = 26
    • N이 이러한 루프를 통해 원래 수까지 돌아오는 횟수를 출력하면 된다.

    solution

    import sys
    N = sys.stdin.readline().strip() # '26'
    
    # result에 N값을 할당한다. => 나중에 while문의 종료조건으로 값이 변한 N값과 비교하기 위함
    result = N # 26
    cnt = 0
    
    
    while True:
      # N의 각 자리수를 담은 리스트
      N_list = list(map(int,N)) # [2,6] int
    
      # N의 각 자리수를 더한 값의 일의 자리 수
      N_sum_last = str(sum(N_list))[-1] # '8'
    
      # 새로운 수인 N = 그 전 사이클의 N의 일의 자리에 *10을 하고 각 자리수를 더한 값의 일의 자리수를 더해주면 됨
      N = str(N_list[-1]*10 + int(N_sum_last)) # '68'
    
      cnt += 1
    
      # 새로운 수가 된 N값과 맨 처음의 N값을 담았던 result값이 같으면 카운팅을 출력하고 whlie문을 빠져나감
      if N == result:
        print(cnt)
        break

    댓글