incastle의 콩나물
[알고리즘] 백준 1110번, 더하기 사이클, if문 활용, python(8) 본문
ㄷ백준 1110번, if문을 활용해서 더하기 사이클 문제 해결하기
문제
- 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 있어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
- 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
- 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
처음에 고민해야할 것은 숫자가 있을 때 10의 자리와 1의 자리를 어떻게 분리할 것인가?
내가 선택한 것은 숫자를 string으로 바꿔서 첫 번째와 두 번째를 뽑아내자 였다. 아래 코드
number = input()
first_number = number
run_time = 0
while True:
if int(number[0]) + int(number[1]) >= 10:
number = str(number[1]) + str(int(number[0]) + int(number[1]))[1]
run_time += 1
else:
number = str(number[1]) + str(int(number[0]) + int(number[1]))
run_time += 1
if first_number == number:
print(run_time)
break
하지만 첫 번째 조건인 1자리 수 일 때 0을 붙이는 것이 해결되지 않아서 다른 방법 고안
first_number = int(input())
second_number = 0
first_number = 0
roof_counter = 0
if not (0 <= firest_number <= 99):
exit()
number_checker = first_number
while True:
second_number = first_number % 10
first_number = first_number // 10
result_number = first_number + second_number
first_number = (second_number *10) + result_number %10
if (number_checker == first_number):
break
몫과 나눗셈을 출력하는 방식으로 변경.
'python > 알고리즘' 카테고리의 다른 글
[알고리즘] 백준 2920번, 음계, 1차원 배열 사용하기, python(11) (0) | 2019.04.13 |
---|---|
[알고리즘] 백준 1065번, 한수, 함수 만들기, python(9) (0) | 2019.04.11 |
[알고리즘] 백준 10871번, X보다 작은 수, if문 활용, python(7) (0) | 2019.04.08 |
[알고리즘] 정수 배열(int array)가 주어질 때 가장 큰 이어지는 원소들의 합을 구하기, Brute force, python(4) (0) | 2019.04.05 |
[알고리즘] 백준 알고리즘 1001번, A-B 출력, python(3) (0) | 2019.04.05 |
Comments