알고리즘/Level 1
블랙잭
Gushers
2022. 9. 5. 16:28
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
접근 방법
블랙잭 문제는 대표적인 완전 탐색 알고리즘이다.
- M(카드의 합)을 넘지 않으면서 M에 최대한 가까운 카드 3장
카드의 합보다 작은 수는 모두 무시하고 카드 3장을 찾을것이기 때문에 3중 for문을 사용하여 각 수의 합을 얻는다.
코드
function solution(card, sum, arr) {
let answer = 0;
for (let i = 0; i < card; i++) {
for (let j = i + 1; j < card; j++) {
for (let k = j + 1; k < card; k++) {
let tmp = arr[i] + arr[j] + arr[k];
if (tmp > answer && tmp <= sum) {
answer = tmp;
}
}
}
}
return answer;
}
solution(10, 500, [93, 181, 245, 214, 315, 36, 185, 138, 216, 295]);
3중 for문을 통해 각각의 수에 접근을 하면 된다.
이때 시간 복잡도는 O(n^3)이 나오게 된다.
이 문제는 완전탐색 알고리즘의 매우 기초적인 문제이다.