문제 요약 및 풀이
너무 많이 틀려가며 풀었다 ㅠ
일단 푸는 방법은 브루트 포스, 다 긁어버리면 된다.
하지만 무작정 다 긁으면 TLE 난다.
N이 최대 1000이고, 이것보다 조금은 큰 범위로 세제곱만큼해서 긁어야 하는데, 이걸 다 긁으면?
가뿐히 1억을 넘긴다.
따라서 몇가지 스킵 조건을 걸어서, TLE가 나지 않게 막으면 된다.
풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
N, S = map(int,input().split())
if S > 0:
l = [*map(int,input().split())]
else:
l = []
L = [i for i in range(1,1005) if i not in l]
ans = 9876543210
for i in L:
if i in l or i - N > ans:
continue
for j in L:
if j in l or i*j - N > ans:
continue
for k in L:
if k in l:
continue
ans = min(ans, abs(N - i*j*k))
if N < i*j*k:
break
print(ans)
끝