백준 1110번 파이썬
문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다.
먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다.
그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
초기 입력값 26
2+6 = 8이다. 새로운 수는 68이다.
6+8 = 14이다. 새로운 수는 84이다.
8+4 = 12이다. 새로운 수는 42이다.
4+2 = 6이다. 새로운 수는 26이다.
4번 돌았으니 출력값은 4가 나와야 한다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
# 예제 입력 1
>>> 26
# 예제 출력 1
4
# 예제 입력 2
>>> 55
# 예제 출력 2
3
# 예제 입력 3
>>> 1
# 예제 출력 3
60
# 예제 입력 4
>>> 0
# 예제 출력 4
1
# 예제 입력 5
>>> 71
# 예제 출력 5
12
이 문제를 풀기 위해 산술 연산자를 사용했는데 표가 있다면 참고할 수 있다.
문제를 풀기 위해 먼저 3가지가 필요했다
1. 초기 입력값
2. while문에 들어가 연산을 한 다음, 마지막에 초기 입력값과 비교할 변수
3. 사이클의 수를 담은 변수
N = int(input()) # 초기 입력값
num = N # 초기 입력값과 비교할 변수
count = 0 # 사이클 수
다음으로 바로 while문을 사용해 조건에 충족할 때 까지 반복해주었다.
# 전체 코드
N = int(input())
num = N
count = 0
while True:
count += 1
a = num//10
b = num%10
c = (a+b)%10
num = (b*10)+c
if N==num:
break
print(count)
한 줄씩 알아보자
while True를 해주어 break가 있을 때 까지 계속 반복해주도록 하고
반복이 한번씩 돌 때마다 count 변수가 1씩 +가 된다.
while True: # True 일 경우 계속 반복
count += 1 # 반복이 돌 때마다 +1을 한다.
// 는 값을 나눈다음 소수점을 제외한 몫을 가져온다.
코드에서는 입력값을 10으로 나눈 다음 그 몫을 가져오도록 했는데 그 이유는, 예를들어 68이 입력값이라면
a라는 변수 안에는 6이 들어가야 한다. 68/10의 몫은 6이므로 원하는 값을 가져올 수 있기 때문에 나누기 10을 했다.
a = num//10
% 는 나눈 값의 나머지를 가져온다.
입력값을 10으로 나눈 다음 나머지를 가져온다. 입력값이 68 이니까
b라는 변수 안에는 8이 들어가야 한다. 68/10의 나머지는 8이므로 원하는 값을 가져올 수 있다.
b = num%10
비슷하게 필요한 값을 가져와주기 위해 산술 연산자를 사용했다.
c = (a+b)%10 # (6+8=14)%10 의 값은 4이다.
num = (b*10)+c # (8*10=80)+4 는 84
마지막으로 초기 입력값과 현제의 값이 일치하면 break를 통해 반복을 종료하고
몇번 반복했는지 count를 print 해주면 문제를 풀 수 있다.
if N==num: # 초기 입력값과 더한 값이 값다면 while문을 종료하고 몇번 반복했는지 print 한다.
break
print(count)