본문 바로가기
Me/Algorithm

1. 백준 Python[1110] 더하기 싸이클

by 폴스업데이트 2021. 1. 25.
728x90

[1110] 더하기 싸이클


 

난이도: Bronze 1

시도횟수: 1

www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

문제

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의 사이클의 길이를 구하는 프로그램을 작성하시오.

 


제출한 코드

def cycle(X):
    new_number=(X%10)*10+(((X//10)+X%10))%10
    return new_number

num=int(input())
initial=num
how_many=1
while initial!=cycle(num):
    num=cycle(num)
    how_many+=1
print(how_many)

코드 설명

주어진 조건대로 싸이클 1회에 대한 함수를 만들고, 원래 숫자로 돌아올때까지 반복문을 이용하여 함수를 실행시켰다. 

 

함수 파트에서는 %와 //를 사용하였다. %를 이용해 일의 자리의 수를 십의 자리로 바꾸어주었고, 일의 자리에는 문제에서 시킨대로 원래 수의 일의 자리수와 십의 자리 수 합을 넣어주었다. (X//10)+(X%10)이 그 부분이다. 이때 10을 넘을 수 있으므로 다시 10으로 나눈 나머지를 구해주었다. 이렇게 한번 싸이클을 돌려주고 새로운 정수를 return해주는 cycle(X)함수를 만들었다.

 

반복문 파트에서는 처음 숫자를 initial이란 변수에 저장해주고 cycle(X)를 돌릴때마다 how_many변수를 1씩 추가해주어 싸이클 개수를 카운트했다.

 

Comment

어렵지 않게 해결할 수 있었고, 새롭게 알아내거나 특별히 느낀 바는 딱히 없었습니다. 앞으로 틈틈히 푼 알고리즘 문제를 정리해갈 예정입니다! 

 

728x90

'Me > Algorithm' 카테고리의 다른 글

6. 백준 C++[3495] 아스키 도형  (0) 2021.07.31
5. 백준 C++[3048] 개미  (0) 2021.07.21
4. 백준 C++[1183] 약속  (0) 2021.07.15
3. 백준 Python[1654] 랜선 자르기  (0) 2021.02.25
2. 백준 Python[11758] CCW  (0) 2021.01.27

댓글