https://www.acmicpc.net/problem/1110
이 문제를 처음 본 순간 떠오른 풀이 방법은 문자열 인덱싱이다.
해당 코드는 아래와 같다.
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 |