[BOJ][Python][브2][2231] 분해합
문제 링크
첫 번째 풀이
정답코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
from math import pi, sqrt
from collections import deque
# sys.stdin = open("input.txt", 'r')
n = int(input())
arr = []
ans = 0
for i in range(max(1, n-54), n):
x = i
x += sum(map(int, str(i)))
if x == n:
ans = i
break
print(ans)
두 번째 풀이 : 빠른 풀이
정답코드
n이 1,000,000일 때 100 ~ 10000 근처에서 생성자를 구할 가능성은 없기 때문에, 최대한 가능성이 있는 범위에서만 확인을 하면 풀이시간을 단축할 수 있습니다.
1,000,000이 n으로 들어왔다고 했을 때, n의 가장 작은 생성자가 x라고 하겠습니다. x는 6자리 수일 것이고 따라서 x + 9(자릿수 최대값) * 6(x의 최대 자릿수 갯수) = 1,000,000일 것입니다.
n이 100일 때는 x + 2 * 9 == 100일 것이기 때문에 x의 범위는 [100-92,100]정도가 될 것입니다.
n이 작을 때에도 6 * 9를 빼는 것은 시간이 약간 늘어나는 것뿐이기 때문에 6 * len(n)을 빼지 않고 54를 빼기도 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
from math import pi, sqrt
from collections import deque
# sys.stdin = open("input.txt", 'r')
n = int(input())
arr = []
ans = 0
for i in range(max(1, n-54), n):
x = i
x += sum(map(int, str(i)))
if x == n:
ans = i
break
print(ans)
Success Notice: 수고하셨습니다.
Leave a comment