본문 바로가기

1Day 1Algo

[1Day 1Algo] 백준 1110번 더하기 사이클 (Python)

https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

 

이 문제를 처음 본 순간 떠오른 풀이 방법은 문자열 인덱싱이다.

해당 코드는 아래와 같다.

Code

n = input()
if len(n) == 1:
    n = "0" + n
result = n
cnt = 0

while (True):
    temp = str(int(result[0]) + int(result[1]))
    result = result[1] + temp[-1]
    cnt += 1

    if result == n:
        print(cnt)
        break

 

그러나 그 외에도 간단한 산술 계산을 통해 풀 수 있다.

그 이유는 처음 입력받는 값과 이후 모든 계산값이 0 ~ 99 까지의 정수로 최대 두 자리를 넘지 않기 때문이다.

 

코드에서 사용된 산술 연산자는 다음과 같다.

// 는 소수점을 버린 몫을 구하는 연산자이다.

% 는 나머지를 구하는 연산자이다. 

 

N // 10 은 N의 10의 자리수를 구하고, N % 10 은 N의 1의 자리수를 구한다.

(단, N은 최대 두 자리를 넘지 않는다.)

 

이를 갖고, 문제에서 원하는 패턴으로 계산을 이어가면 정답을 얻을 수 있다.

Code

n = int(input())
result = n
cnt = 0

while True:
    temp = (result // 10) + (result % 10)
    result = ((result % 10) * 10 + temp % 10)
    cnt += 1
    
    if result == n:
        print(cnt)
        break

 

문자열 인덱싱산술 연산자를 사용한 풀이방식을 비교하면,

산술 연산자가 속도가 더 빨랐다.