1. 문제
https://www.acmicpc.net/problem/1503
1503번: 세 수 고르기
첫째 줄에 N(1 ≤ N ≤ 1,000)과 집합 S의 크기 M(0 ≤ M ≤ 50)이 주어진다. 둘째 줄에는 집합 S에 들어있는 수가 주어진다. 집합에 들어있는 수는 1,000보다 작거나 같은 자연수이고, 공백으로 구분되어
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# n : target 자연수
# m : 집합의 크기
n, m = map(int, input().split())
# s : 자연수 집합
s = list(map(int, input().split()))
# sList : 집합에 자연수가 포함되어 있는지 확인하는 bool 리스트
sList = [False for i in range(0, 1002)]
for i in s:
sList[i] = True
# minMultiNum : target 자연수와의 차이 중 최솟값
minMultiNum = 2147483647
for i in range(1, 1002):
if sList[i]: continue
for j in range(i, 1002):
if sList[j]: continue
multiNum = i * j
for v in range(j, 1002):
if sList[v]: continue
absMultiNum = abs(n - multiNum * v)
minMultiNum = min(minMultiNum, absMultiNum)
if(n+1 < multiNum * v): break
if minMultiNum == 0:
break
if minMultiNum == 0:
break
print(minMultiNum)
3. FeedBack
- 오래걸린 문제이다.
브루트포스 알고리즘으로 3중 반복문을 사용하다 보니, 중간중간 continue나 break 조건을 확실히하여 시간초과를 잡는게 중요 포인트였다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 잃어버린 괄호(1541) (0) | 2023.04.20 |
---|---|
(Python)백준 코딩테스트 연습 - 안녕(1535) (1) | 2023.04.19 |
(Python)백준 코딩테스트 연습 - 최대 곱(1500) (0) | 2023.04.09 |
(Python)백준 코딩테스트 연습 - 기타콘서트(1497) (0) | 2023.04.08 |
(Python)백준 코딩테스트 연습 - 뒤집기 II(1456) (0) | 2023.04.01 |