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
반응형
'Python > 백준 알고리즘' 카테고리의 다른 글
[BaekJoon/Python] : 백준 2562번 - 최댓값 (0) | 2020.12.30 |
---|---|
[BaekJoon/Python] : 백준 10818번 - 최소, 최대 (0) | 2020.12.28 |
[BaekJoon/Python] : 백준 10951번 - A+B -4 (0) | 2020.12.24 |
[BaekJoon/Python] : 백준 10952번 - A+B -5 (0) | 2020.12.24 |
[BaekJoon/Python] : 백준 10871번 - X보다 작은 수 (0) | 2020.12.21 |