2798번: 블랙잭
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let N = input[0], M = input[1]
let cards = readLine()!.split(separator: " ").map { Int(String($0))! }
var result = 0
for i in 0..<cards.count {
for j in (i + 1)..<cards.count {
for k in (j + 1)..<cards.count {
let sum = cards[i] + cards[j] + cards[k]
if (M - sum) >= 0 && M - sum < M - result {
result = sum
}
}
}
}
print(result)
- 브루탈 포스 (모든 경우의 수를 따져보기)를 적용해야 하는 문제입니다.
- 카드를 고를 때 특정한 규칙이 없음
- N이 100 밖에 안됨 (3중 반복문을 사용해도 1000000번의 연산 밖에 안됨)
- 파이썬은 combination이라는 유용한 메소드가 있었는데 스위프트에는 삼중 반복문을 사용해서 풀어야 합니다.
- 3카드의 합이 아래 조건을 만족하면 result에 저장합니다.
- M 보다 작고
- 이전에 뽑은 3카드의 합 보다 M에 가까울 때