반응형
<풀이1 - 문자열 인덱싱>
N = input()
if int(N) < 10:
N = "0" + N
calNum = N[1] + str(int(N[0]) + int(N[1]))[-1]
count = 1
while calNum != N:
calNum = calNum[1] + str(int(calNum[0]) + int(calNum[1]))[-1]
count += 1
print(count)
제일 처음 생각한 방법으로 N을 문자열로 받은 뒤 인덱싱해 푸는 방법이었다.
<풀이2 - 몫과 나머지 연산>
N = int(input())
new_N = N
cnt = 0
while True:
new_N = (new_N % 10) * 10 + (new_N // 10 + new_N % 10) % 10
cnt += 1
if new_N == N:
break
print(cnt)
새롭게 배운 풀이인데 N은 정수이므로 몫(//)과 나머지(%) 연산을 이용해 십의 자리 수와 일의 자리 수를 따로 분리해 추출해 내는 방법이다.
while문으로 무한 루프를 만들어 두고 new_N 변수에 기존 new_N 변수 값의 일의 자리수에 10을 곱해 더하고 new_N 변수 값의 십의 자리와 일의 자리 수의 합의 값의 일의 자리를 그냥 더하는 방식이다.
각 자리수를 추출할 때, 일의 자리수는 (추출할 수) % 10 로 추출하고 십의 자리수는 (추출할 수) // 10 으로 추출한다.
그리고 구글링 해보니 나처럼 while문 자체에 조건을 넣기보다는 while문은 True등으로 무한 루프를 만들고 if조건문을 통해 break하는 방법을 많이 사용하는 것 같다.
이게 가독성 면에서 더 좋은 것 같다.
<핵심 정리>
1. 문자열 인덱싱 방법이 아니더라도 몫과 나머지 연산을 통해 정수의 각 자리 수를 추출해낼 수 있다.
2. while문 자체에 조건을 넣기보다는 무한 루프로 두고 if 조건문에 break를 두는 것도 좋다.
반응형
'Base > Algorithm Study' 카테고리의 다른 글
[Python/파이썬] 백준 알고리즘 1065번 - 한수 (0) | 2021.08.15 |
---|---|
[Python/파이썬] 백준 알고리즘 4673번 - 셀프 넘버 (0) | 2021.08.15 |
[Python/파이썬] 백준 알고리즘 10951번 - A+B - 4 (0) | 2021.08.14 |
[Python/파이썬] 알고리즘 지엽 정리(계속 수정 및 추가) (0) | 2021.08.14 |
[Python/파이썬] 백준 알고리즘 15552번 - 빠른 A+B (0) | 2021.08.14 |