문제풀이/백준
[python/파이썬] 백준 1110 - 더하기 사이클(브1)
bbugi
2023. 1. 9. 21:26
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
단계별로 풀어보기 - 반복문
12번째 문제
파이썬 프로그램에서 풀이 시 정답 나옴.
백준에서 제출 시 시간초과 출력...
해결책 찾아야 함 (해결완료)
---
문자열 리스트를 통한 풀이가 시간이 오래 걸리는 듯??
자리수 계산으로 풀이해야할 때는
// , % 등을 사용하는 습관을 만들자!
[백준 제출 풀이]
import sys
input = sys.stdin.readline
n = int(input())
ans = n
count = 0
while True:
n1 = n // 10
n2 = n % 10
n3 = (n1+n2) % 10
# num = int(str(n2)+str(n3))
num = n2 * 10 + n3
n = num
count += 1
if num == ans:
break
continue
print(count)
[다른 코드 풀이]
# 백준 제출코드 - 두번째 풀이 - 반복되는 코드가 많아서 다시 풀어보기
import sys
input = sys.stdin.readline
n = int(input())
ans = n
num_cnt = 0
while True:
if num_cnt == 0:
n1 = n // 10 # 10의자리 수
n2 = n % 10 # 1의 자리 수
k = n1 + n2
k1 = k // 10
k2 = k % 10
n = int(str(n2) + str(k2))
num_cnt += 1
continue
elif n != ans:
n1 = n // 10 # 10의자리 수
n2 = n % 10 # 1의 자리 수
n = n1 + n2
k = n1 + n2
k1 = k // 10
k2 = k % 10
n = int(str(n2) + str(k2))
num_cnt += 1
continue
else:
print(num_cnt)
break
# 시간초과 코드 - 첫번째 풀이
import sys
input = sys.stdin.readline
def sum_cycle(n):
cycle_num = 0
ans = n
z = 0
while True:
if z == 0:
x = list(map(int, str(n).zfill(2)))
y = list(map(int, str(sum(x)).zfill(2)))
z = int(str(x[1]) + str(y[1])) # 새로운 n이 되어야 함
cycle_num += 1
continue
elif z == ans:
return cycle_num
break
else:
x = list(map(int, str(z).zfill(2)))
y = list(map(int, str(sum(x)).zfill(2)))
z = int(str(x[1]) + str(y[1]))
cycle_num += 1
continue
n = int(input())
print(sum_cycle(n))