안녕하세요. 지난 포스팅의 BOJ 10951번 : A + B - 4에서는 while문과 예외처리 구문(try ~ except ~)를 이용해서 문제를 풀어보았습니다. 오늘은 반복문을 중심으로 하는 마지막 문제를 풀어보도록 하겠습니다.
핵심 포인트
- 반복문 : while문
- 조건문
일단, 문제의 예제를 통해 생각해보도록 하겠습니다. 26이 입력된다고 가정하죠. 그러면 아래의 과정으로 새로운 숫자가 만들어집니다.
1. 새로운 수의 십의 자리 = 26의 일의 자리 = 6
2. 새로운 수의 일의 자리 = 26의 십의 자리 + 26의 일의 자리 = 6 + 2 = 8
따라서, 새로운 수는 68이 됩니다. 하지만 28 $\neq$ 68이기 때문에 한번 더 해보도록 하죠.
1. 새로운 수의 십의 자리 = 68의 일의 자리 = 8
2. 새로운 수의 일의 자리 = 68의 십의 자리 + 68의 일의 자리 = 14
여기에서 문제가 생깁니다. 보시면 새로운 수의 일의 자리를 만들 때 두 자리 수가 생기죠. 하지만, 문제의 조건에 따르면 가장 오른쪽 자리 수, 즉 일의 자리를 사용하라고 하였습니다. 따라서 4가 되겠죠. 그러면 저희는 위 과정을 다시 아래와 같이 바꿀 수 있습니다.
1. 새로운 수의 십의 자리 = 68의 일의 자리 = 8
2. 새로운 수의 일의 자리 = (68의 십의 자리 + 68의 일의 자리)의 일의 자리 = 14의 일의 자리 = 4
따라서, 새로운 수는 84가 되죠. 여전히 28 $\neq$ 84이기 때문에 한번 더 해보도록 하죠.
1. 새로운 수의 십의 자리 = 84의 일의 자리 = 4
2. 새로운 수의 일의 자리 = (84의 십의 자리 + 84의 일의 자리)의 일의 자리 = 12의 일의 자리 = 2
따라서, 새로운 수는 42가 되죠. 여전히 28 $\neq$ 42이기 때문에 한번 더 해보도록 하죠.
1. 새로운 수의 십의 자리 = 42의 일의 자리 = 2
2. 새로운 수의 일의 자리 = (42의 십의 자리 + 42의 일의 자리)의 일의 자리 = 6의 일의 자리 = 6
따라서, 새로운 수는 28가 되죠. 드디어 처음의 숫자를 다시 얻었습니다. 따라서, 저희는 총 4번 반복했기 때문에 더하기 사이클은 4가 됩니다. 이와 같은 규칙을 가진 문제는 문제의 예제를 규칙에 맞게 적용해보아야 합니다. 그리고 문제에서 입력되는 숫자의 범위가 최대 두 자리 숫자이기 때문에 백의 자리는 신경쓰지 않으셔도 됩니다. 다음으로 어떤 수에서 십의 자리와 일의 자리를 추출하려면 어떻게 해야할까요? 방법은 간단합니다. N이 두 자리 숫자일 때 십의 자리는 N // 10, 일의 자리는 N % 10가 됩니다. 이를 코드로 작성하면 아래와 같습니다.
tmp = tmp % 10 * 10 + (tmp // 10 + tmp % 10) % 10
여기서 중요한 점은 새로운 숫자와 기존의 숫자를 계속 비교하다가 일치하면 반복을 그만하고 연산을 반복한 횟수를 출력해주어야합니다. 따라서, 언제 끝날지 모르기 때문에 while 문을 사용하고 조건문을 통해 비교를 해준 뒤 조건에 맞으면 break 구문으로 반복문을 탈출하면 되겠네요! 이때, 새로운 숫자를 계속 만들기 위해 임시 변수 tmp를 만들어서 새로운 숫자를 계속 저장해주면서 기존의 숫자 N과 비교해주면 됩니다.
N = int(input())
cnt = 0
tmp = N
while True :
tmp = tmp % 10 * 10 + (tmp // 10 + tmp % 10) % 10
cnt += 1
if tmp == N :
break
print(cnt)
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 2562번 : 최댓값 (0) | 2022.06.10 |
---|---|
BOJ 10818번 : 최소, 최대 (0) | 2022.06.09 |
BOJ 10951번 : A + B - 4 (0) | 2022.06.08 |
BOJ 10952번 : A + B - 5 (0) | 2022.06.08 |
BOJ 10871번 : X보다 작은 수 (0) | 2022.06.08 |