[BOJ] 1503 세 수 고르기
Post
취소

[BOJ] 1503 세 수 고르기

문제 요약 및 풀이

1503번: 세 수 고르기

너무 많이 틀려가며 풀었다 ㅠ

wa

일단 푸는 방법은 브루트 포스, 다 긁어버리면 된다.

하지만 무작정 다 긁으면 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)

This post is licensed under CC BY 4.0 by the author.