카테고리 없음

백준 1110번 파이썬

abccoco 2022. 9. 6. 21:59

문제

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)