Base/Algorithm Study

[Python/파이썬] 백준 알고리즘 1110번 - 더하기 사이클

koh1018 2021. 8. 14. 19:32
반응형

 

 

 

<풀이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를 두는 것도 좋다.

반응형