자료구조&알고리즘/백준
[백준] 블랙잭 2798번 (PYTHON)
고쩡이
2024. 3. 7. 11:12
✔ 문제 2798 블랙잭
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
핵심 아이디어
브루트 포스로 완전탐색한다. ans = 0 으로 초기값을 두고, 모든 경우의 수를 탐색하며 ans보다 크고 범위내 숫자라면 갱신한다.
PYTHON
N, M = map(int, input().split())
lst = list(map(int, input().split()))
ans = 0
for i in range(N-2):
for j in range(i+1, N-1):
for k in range(j+1, N):
if ans<lst[i]+lst[j]+lst[k]<=M:
ans = lst[i]+lst[j]+lst[k]
print(ans)
JAVA
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// N, M 입력
int N = scanner.nextInt();
int M = scanner.nextInt();
// 정수 리스트 입력
int[] lst = new int[N];
for (int i = 0; i < N; i++) {
lst[i] = scanner.nextInt();
}
int ans = 0;
// 세 개의 정수를 조합하여 합이 M 이하인 경우 중 최대값 찾기
for (int i = 0; i < N - 2; i++) {
for (int j = i + 1; j < N - 1; j++) {
for (int k = j + 1; k < N; k++) {
int sum = lst[i] + lst[j] + lst[k];
if (ans < sum && sum <= M) {
ans = sum;
}
}
}
}
System.out.println(ans);
}
}