Python/백준 알고리즘

[BaekJoon/Python] : 백준 1110번 - 더하기 사이클

우준세 2020. 12. 27. 19:36
728x90
반응형

 

이번 포스팅은 www.acmicpc.net/problem/1110에서 푼 것을 토대로 작성했습니다.

While문의 마지막 문제인 더하기 사이클입니다.

 

 

 

문제를 보시면 정수 N이 입력되고 계산식에 따라 진행된 후

N이 다시 나오는 사이클 수를 나오게 만드는 프로그램입니다.

예를 들어 26을 입력한다면

 

1. 2+6 = 8, 그리고 68

2. 6+8 = 14, 그리고 84

3. 8+4 = 12, 그리고 42

4. 4+2 = 6, 입력과 같은 26이 나오기까지 4번 계산을 반복했기 때문에

출력에서 4가 나오는 것을 볼 수 있습니다. 

그리고 10보다 작다면 0을 붙여 두 자리 수로 만들어 계산을

하라고 하는데 파이썬에서는 int로 계산하면 알아서 해주기 때문에 

신경 쓰지 않았습니다.


- 실패 코드(시간초과) 

### 이렇게 하면 시간초과가 나오게 됩니다. 

import sys 

n = int(sys.stdin.readline())
count = 0

while True : 
    sum =  n//10 + n%10
    new = n%10*10+sum%10
    count += 1 
    
    if n == new:
        break
print(count)

 

처음에는 문제 그대로 실행을 해보려고 

이렇게 코드를 짜봤는데 시간 초과가 나왔습니다.

이유를 생각해보니 

while문 안의 n이 사이클을 돌면서 갱신이 되어야 했는데

위 코드의 n은 처음 입력받은 것으로 계속해서 계산이 되기 때문에

while문에서 빠져나올 수가 없어 시간 초과가 나오는 것이었습니다.


- 성공 코드

import sys

n = int(sys.stdin.readline())
cheak = n 
count = 0

while True : 
    
    sum =  n//10 + n%10
    new = n%10*10+sum%10
    count += 1 
    
    n = new 
    
    if new == cheak : 
        break
    
print(count)

 

그래서 cheak를 만들어 처음 n의 숫자를 보관하였고

n = new를 하여 n을 갱신시켰습니다.

그리고 new와 cheak를 비교하여 같을 때 

while문을 빠져나오게 만들고 

count, 즉 사이클 수를 출력하게 코드를 만들어 성공하였습니다.

 

 

다음 포스팅으로 찾아오겠습니다 :)

 

728x90
반응형