블랙잭은 주어진 몇 장의 카드 중에서 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);
}
}
'Algorithm' 카테고리의 다른 글
백준 1010번 다리 놓기 (0) | 2023.03.14 |
---|---|
백준 2231번 분해합 (0) | 2023.03.13 |
백준 1436번 영화감독 숌 (0) | 2023.03.11 |
백준 1934번 최소공배수 (0) | 2023.03.11 |
백준 11399번 ATM (0) | 2023.03.11 |
댓글