📝 문제
> 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
🎨 풀이
💡 성공 코드
n = int(input())
tmp = 0 # 계속 바뀔 예정인 변수
count = 0
n_list = list(str(n))
if len(n_list) == 1 :
n_list.insert(0,0)
while (True):
plus = str(int(n_list[0]) + int(n_list[1]))
if len(plus) == 2 :
plus = plus[-1]
tmp = str(n_list[1]) + plus
count += 1
n_list = list(str(tmp))
if int(tmp) == n:
break
print(count)
> 핵심 : 문제에서 알려준 사이클을 있는 그대로 구현해내면 된다.
1. 변수 만들기
- tmp 는 이름처럼 임시 저장 느낌이고, 변수의 값이 계속 바뀐다. (위의 예시에서는 26, 68, 84, ...가 순서대로 담긴다)
- count 는 바뀐 횟수다. (이 문제에서 구하고자 하는 "사이클의 길이"다)
2. n값을 한자리씩 분해해서 n_list에 넣는다. ex) n_list = ['2','4']
3. 만약 n_list의 길이가 1이라면 한자리 숫자가 입력되었다는 뜻이므로, 앞자리에 0을 넣어준다. (문제에 나와있다)
4. 무한 반복문을 설정한다.
5. 먼저, n_list의 각 자리의 숫자를 더한 후 문자열 형태로 바꾼 후 plus 변수에 넣는다.
6. 만약 plus의 자릿수가 2자리라면 끝 자리만 plus에 넣어준다. (가장 오른쪽 자리 수만 붙여주기로 했기 때문)
7. tmp에는 원래 있던 n_list의 뒷자리 수와 plus에 들어있는 한 자리 수를 합쳐서 넣는다.
8. count = count + 1을 해준다. (더하기 사이클을 한번 돌았기 때문임)
9. 다시 tmp에 있는 값을 n_list에 쪼개서 넣어준다.
10. 만약 tmp에 있는 값과 n 값이 같다면 무한 반복문을 탈출한다.
아니라면 4번으로 이동해서 4~10 과정을 반복한다.
11. count를 출력해주면 끝난다.

끝~
⭐ 느낀점
> 코드가 쫌 복잡해보이기는 하는데~ 예전에 비해 발전한 게 느껴져서 아주 좋다. 예전에는 이거 못 풀고 넘겼었는데 ㅎㅎ~~~~ 힘을 더 내보자 파이팅이다~
'🎲 알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 2562번 - 최댓값 (파이썬) (0) | 2022.06.03 |
---|---|
[백준] 10818번 - 최소, 최대 (파이썬) (0) | 2022.06.02 |
[백준] 10951번 - A + B - 4 (파이썬) (0) | 2022.05.31 |
[백준] 10952번 - A + B - 5 (파이썬) (0) | 2022.05.30 |
[백준] 10871번 - X보다 작은 수 (파이썬) (0) | 2022.05.29 |