문제
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의 사이클 길이를 출력한다.
<<코드>>
a = int(input()) #a는 87이다
new_a = a
count = 0
while True:
b = a//10 #b는 8
c = a%10 #c는 7
d = (b+c)%10 #d는 5
a = c*10+d #75 라는 값으로 변화됨
count+=1
if a == new_a: #while문에서의 a와 원래 집어넣었던 a값(new_a)이 일치한다면 while문 중단
break
print(count)
<<결과값>>
$ python main.py
1
60
아 이 문제는 변수가 너무 헷갈렸다...
처음에 a = new_a 행을 넣지 않았다.
a의 값은 while문에서 계속 바뀌는데 최초의 a값을 간직한 new_a 가 필요했다ㅠㅠ
- while True로 무한루프 실행
- b는 입력값의 몫, c는 입력값의 나머지로 10의자리, 1의자리 저장
- d는 b와c의 각자리를 저장하여 나머지로 저장
- 루프 완료되면 count +1
- 원래 input으로 집어넣은 a(=new_a) 의 값과, while문에서 돌려져서 새로 나온 a의 값이 일치한다면 while문 종료
'알고리즘' 카테고리의 다른 글
[파이썬] 단계별 백준 문제 풀기 - 4673 함수 (셀프넘버) (0) | 2021.03.06 |
---|---|
[파이썬] 단계별 백준 문제 풀기 - 4344 1차원 배열 (평균은 넘겠지) (0) | 2021.03.06 |
[파이썬] 단계별 백준 문제 풀기 - 2884 IF문 알람 시계 (0) | 2021.03.06 |
[파이썬] 단계별 백준 문제 풀기 - 2588 곱셈 (0) | 2021.03.06 |
[파이썬] 단계별 백준 문제 풀기 - 10869 사칙연산 (0) | 2021.03.06 |