Develop/Algorithm

[문제풀이]백준/1110/더하기 사이클

Levi- 2022. 9. 30. 00:47
반응형

0. 개요

 - while문을 많이 써보지 않아 공부할 겸 정리 하려 한다.

 - 해당 문제풀이는 보시는 분의 개발공부에 전혀 도움이 안될 것이니 참고만 해주길 바란다.

 - 하지만 지적은 늘 감사하게 확인하고 공부하겠다.

 

1. 문제

문제

2. 문제 해석

 1) 0<=N<=99 가 주어 진다.

  - 입력이 하나며, 그냥 두자리의 정수라는 뜻

 2) N이 10보다 작다면 앞에 0을 붙여 두자리로 만들라.

  - 문제에서 주는 N, 또는 너가 풀다가 다시 반복해야 할 N이 한 자리수 이면 이앞에 0을 붙혀 두자리로 만들어라는 뜻

  - 예) N = 3 이면 N = 03 으로 만들어라

 3) N의 뒷자리 수와 각각 자리수를 더한 수의 뒷자리 수를 합쳐 새로운 수를 만들어라

  - 예) N = 10이면 0(N의 뒷자리) + 1(1+0) = 01--> 새로운 수 ...반복

 4) 반복 후 새로운 수가 N과 같아지면 사이클의 횟수를 구하라

 

3. 예외 및 특이사항

 1) N이 한 자리 수가 되는 경우

  - 동기의 도움으로 더 간단해 지는 조건임을 알았다.

  - 다음 배열을 보자

  # 1 ▶︎ 0+1=1 ▶︎11 ▶︎ 1+1 =2 ▶︎ 12 ▶︎ 1+2=3 ▶︎ 23..... ///// 2 ▶︎ 0+2=2 ▶︎ 22 ▶︎ 2+2=4 ▶︎ 24 ▶︎ 2+4=6 ▶︎ 46 ....

  - 규칙이 보이는가? 그렇다. 

  - 규칙같은건 없고 처음 N이 한 자리 일때만 집중하자

  - 그부분을 코드로 하면 다음과 같다. 

N = input()
a=N
while True:
    if a <10:
        a = a*10+a
        count1+=1

 

4. 코드 풀이 

import sys
N = int(sys.stdin.readline()) # 주어진 정수

a=N # while문이 끝날때 N과 비교 하기 위한 전환

count1 = 0 # 몇번 돌았는지를 확인 하기 위한 카운트
while True: # 조건이 없는 한 무한으로 도는 while문
    if a <10: # 위에서 확인한 규칙 적용 
        a = a*10+a
        count1+=1 # 이 과정도 한번 반복되는 사항으로 카운팅
    elif a>=10: 
        b=(a//10)+(a%10) # N(a)을 만들기 위한 정수 덧샘
        
        # 덧샘 값이 두자리 일때와 한 자리 일때를 구분 해서 처리 방법을 나눈다.
        # 더할때는 문자열로 더하고 다시 int(정수)로 바꾼다.
        # 각각의 if 문이 지날때 카운팅 되어야 함.
        if b >=10: 
            a = str(a%10)+str(b%10)
            a=int(a)
            count1+=1
        else:
            a = str(a%10)+str(b)
            a=int(a)
            count1+=1
    if a == N: # while 문을 돌다가 a가 최초 N값과 같다면 count1 출력 후 break
        print(count1)
        break
반응형