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
문자열 인덱싱과 산술 연산자를 사용한 풀이방식을 비교하면,
산술 연산자가 속도가 더 빨랐다.
'1Day 1Algo' 카테고리의 다른 글
[1Day 1Algo] 백준 3986번 좋은 단어 (JAVA) (0) | 2022.01.20 |
---|---|
[1Day 1Algo] 백준 1065번 한수 (JAVA) (0) | 2022.01.10 |
[1Day 1Algo] 백준 12865번 평범한 배낭 (C++) (0) | 2021.11.21 |
[HackerRank] Python (Basic) Certificate (0) | 2021.11.19 |
[1Day 1Algo] 백준 4948번 베르트랑 공준 (C++) (0) | 2021.11.06 |