[1110] 더하기 싸이클
난이도: Bronze 1
시도횟수: 1
문제
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
어렵지 않게 해결할 수 있었고, 새롭게 알아내거나 특별히 느낀 바는 딱히 없었습니다. 앞으로 틈틈히 푼 알고리즘 문제를 정리해갈 예정입니다!
'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 |
댓글