
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
문제의 설명대로 알고리즘을 구성하면서 생각을 해보자
우선 입력받은 수를 십의자리와 1의 자리로 나누어서 생각을 해야한다. 만약 9를 입력받으면 [0,9]식으로 저장을 해야한다.
두번째는 더하기 사이클이 처음의 수로 돌아간다는 조건에서 루프가 마무리된다는 걸 생각하면 다음과 같이 코드를 짤 수 있다.
#N= list(map(int,input().strip()))-> 해당 코드의 경우 한자리수는 처리를 못한다
num = int(input())
N = [num//10, num%10]# 일과 십의 자리 수를 나누어서 저장한다
origin = list(N) #origin = N을 사용하면 메모리내에 같은 공간을 사용하게 된다
count = 0
while 1:
tot = sum(N) % 10
#수를 바꾸는 알고리즘
temp = N[1]
N[1] = tot
N[0] = temp
count += 1
if N == origin: #다시 처음의 숫자로 돌아간다면
break #loop를 깨라
print(count)
처음에 문제를 풀었을 때 원래의 입력된 수 N을 저장하려고 origin = N으로 작성을 했지만, 이 경우 origin도 N과 같은 저장공간을 할당받는 걸 생각을 하지 못했다.
또 하나의 주의점은 N을 저장할 때 .stip으로 일과 십의 자리수를 저장하려 하면 해당 코드에서 일의 자리만 있는 경우는 저장을 하지 못하며 이 경우 0을 리스트 앞으로 append해야 한다.
'알고리즘_파이썬' 카테고리의 다른 글
| 백준 9012 괄호 VPS (0) | 2024.01.13 |
|---|---|
| 백준 1181 단어정렬 (1) | 2024.01.13 |
| 백준 1652 누울 자리를 찾아라 (0) | 2024.01.11 |
| 백준 11399 ATM (0) | 2024.01.09 |
| 백준2667 (0) | 2023.12.30 |