탭고리즘
탭고리즘 2025-1-27 블랙잭
종식당
2025. 1. 28. 14:02
728x90
반응형
- 문제설명
입력으로 카드의 개수 N과 숫자 M이 주어지면 다음으로 들어오는 N개의 입력 숫자 중에서 3개를 골라 더해서 M을 넘지 않고 가장 M에 가깝게 만드는 숫자를 구하면 된다.
- 제출코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 처리
int n = scanner.nextInt(); // 카드의 개수
int m = scanner.nextInt(); // 합의 최대값
int[] cards = new int[n]; // 카드 배열
for (int i = 0; i < n; i++) {
cards[i] = scanner.nextInt(); // 카드 값 입력
}
scanner.close();
// 가능한 조합 탐색
int maxSum = 0;
// 세 장의 카드를 선택하는 모든 조합 탐색
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 currentSum = cards[i] + cards[j] + cards[k];
if (currentSum <= m) { // 조건을 만족하는 경우
maxSum = Math.max(maxSum, currentSum); // 최댓값 갱신
}
}
}
}
// 결과 출력
System.out.println(maxSum);
}
}
- 코드설명
for문을 돌면서 세가지의 카드를 선택할 것이기 때문에 for문을 3번 중첩을 통해 사용할 것이다.
첫번째첫 번째 for문을 0부터 n-2까지 다음 for문은 첫 번째 for문에서 뽑은 카드랑 겹치지 않고 다음 카드부터 뽑을 것이기 때문에 i+1부터 n-1까지 돌 것이다. 세 번째 for문은 두 번째 카드의 다음부터 뽑을 것이기 때문에 j+1부터 n까지 돌 것이다.
그리고 뽑은 세가지의 카드를 모두 더한 다음 이 값이 m보다 작거나 같을 때 둘 중에 최댓값을 출력해 주면 된다.
728x90
반응형