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))
'문제풀이 > 백준' 카테고리의 다른 글
[python/파이썬] 백준 2562 - 최댓값(브3) (0) | 2023.01.10 |
---|---|
[python/파이썬] 백준 10818 - 최소, 최대(브3) (0) | 2023.01.10 |
[python/파이썬] 백준 10871 - X보다 작은 수(브5) (0) | 2023.01.10 |
[python/파이썬] 백준 10807 - 개수 세기(브5) (0) | 2023.01.10 |
[python/파이썬] 백준 13458 - 시험 감독(브2) (0) | 2023.01.10 |