728x90
문제 분석
정수 범위 = 0~99
만약 10보다 작은 수 a -> 0a(앞에 0을 붙인다. ex> 01, 02)
각 자리의 숫자를 더한다. ex) 26 => 2+6 = 8
더한 값이 두 자릿수이면 1의 자리만 남겨둔다 ex) 6+8 = 14 => 4
더한 숫자를 기존 숫자 뒤에 붙이고 기존 숫자의 제일 왼쪽 숫자를 없앤다. 268 => 68
이 과정을 반복하였을 때 원래 숫자로 돌아올 수 있는 사이클의 길이(반복한 횟수) N을 구해보자.
입력 -> 출력
- 26 -> 4
- 55 -> 3
- 1 -> 60
- 0 -> 1
- 71 -> 12
출력 매커니즘(예시)
- 26 -> 68
- 68 -> 84
- 84 -> 42
- 42 -> 26
- N = 4
유의사항(코드 설계)
- 정수 형태의 수 A 입력
- 결과값이 a일 경우 break를 거는 루프 시작
- if문을 이용하여 수가 한 자릿수인 지 확인
- 한자릿수의 경우에 뒤에 같은 수를 더하는 작업 진행
- 두자릿수의 경우에 앞자리와 뒷자리를 더하고 그 값을 a의 뒤에 붙여넣고 앞자리 탈락시키는 과정 추가(result에 갱신)
- 사이클의 길이 N 1 증가
- break로 빠져나온 뒤에 N 출력
사용할 문법
- while
- if
- map
- 자릿수 나누기(a/10, a%10)
정답코드
#0~99사이의 변수 A 입력
A = int(input())
B = 0
N = 1
A1 = int(A % 10)
A10 = int(A/10)
#반복문 형성(사이클 구성문), 사이클 길이 N 추가
while A != B:
#A가 두 자릿수일 때
if A/10 > 0:
#B는 A의 1의자리가 10의자리로 가고 10의자리 수는 없어지며
#각 자릿수를 더한 값의 1의 자리가 새로운 1의자리수가 된다
B = int(A1*10 + (A1 + A10)%10)
else:
#A가 한 자릿수일 때
#같은 숫자 뒤에 붙이기
B = A1*10 + A1
A1 = int(B % 10)
A10 = int(B/10)
#A와 B가 같을 때 종료
if A == B:
break
N += 1
#사이클의 길이 N 출력
print(N)
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
BaekJoon - 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰(차이 계산, PYTHON) (0) | 2022.09.03 |
---|---|
BaekJoon - 25304번: 영수증(반복문, PYTHON) (0) | 2022.09.02 |
BaekJoon - 10951번: A+B - 4(반복문, PYTHON) (0) | 2022.06.23 |
BaekJoon - 10952번: A+B - 5(반복문, PYTHON) (0) | 2022.06.23 |
BaekJoon - 25083번: 새싹(특수 문자, PYTHON) (0) | 2022.06.23 |