티스토리 뷰

반응형

백준 1110번 더하기 사이클

 

알고리즘 분류: 수학, 구현

 

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

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

 

 

문제 파악

 

이 문제는 숫자의 자리수를 더해서 새로운 수를 만들고 숫자의 일의 자리수와

 

새로운 수의 일의 자리수를 더하여 처음 원래 숫자와 같아질때 까지 반복하는 문제이다.

 

숫자가 10보다 작을경우에는 앞에 0을 붙여줘서 두자리의 수로 맞춰줘야 한다.

 

예를 들면 8은 10보다 작기 때문에 앞에 0을 붙여줘서 08 이런식으로 쓰는 것이다.

 

이 부분을 보고 그냥 8이나 08이나 일의 자리수는 같은데 굳이 0을 붙이라는것을 보니

 

문자열의 인덱스를 활용해서 풀어야겠다는 힌트를 얻었다.

 

 

코드

 

 

 

이 문제는 문자열의 인덱스를 활용해야겠다는 생각이 들어서

 

일부로 입력값을 정수형으로 받지않고 문자열로 저장하였다.

 

num는 계속 바뀌지만 마지막에 처음수로 돌아왔을 때 까지의 횟수를 계산해야 하므로

 

원래의 수를 original이라는 변수에 따로 저장하였다.

 

num는 문자열이기 때문에 10보다 작을때 대신 길이가 2미만일때 앞에 0을 붙이게하였다.

 

원래의 수로 돌아올때까지 몇번의 횟수가 걸릴지 모르기 때문에 반복문을

 

for문 대신 while True:를 사용해주었다.

 

new_num은 num의 각 자리수를 더한 값이고 num은 다시 num의 일의 자리수와

 

new_num의 일의 자리수를 합한값으로 바꿔준다.

 

계속해서 num과 new_num을 바꿔주다보면 원래의 수(original)과 같아질 때

 

break를 통해 반복문을 빠져나가고 count를 출력해준다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함