Algorithm
백준 2798번 블랙잭
2nyong
2023. 3. 13. 19:15
블랙잭은 주어진 몇 장의 카드 중에서 3장을 조합해 특정 최대값(M)을 넘지 않으면서 가장 근접한 카드합을 출력하는 문제다.
3중 반복문(for)을 사용해 문제를 해결하였다. 중복된 카드 뽑기를 허용하지 않으므로, 각 반복문의 인덱싱에 주의하자.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
int[] cards = new int[N];
for (int i = 0; i < N; i++) {
cards[i] = in.nextInt();
}
int oldSum = 0; // 이전에 뽑은 카드의 합
int newSum = 0; // 지금 뽑은 카드의 합
int firstCard;
int secondCard;
int thirdCard;
for (int i = 0; i < N-2; i++) {
firstCard = cards[i];
for (int j = i + 1; j < N-1; j++) {
secondCard = cards[j];
for (int k = j + 1; k < N; k++) {
thirdCard = cards[k];
newSum = firstCard + secondCard + thirdCard;
if (M - newSum >= 0) { // 카드의 합은 최대값을 넘을 수 없다.
// 지금 뽑은 카드의 합이 최대값에 더 가깝다(차가 적다)면
if ((M - oldSum) > (M - newSum)) {
oldSum = newSum; // oldSum을 newSum으로 갱신한다.
}
}
}
}
}
System.out.println(oldSum);
}
}