[작성일: 2023. 10. 11]
https://www.acmicpc.net/problem/2798
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int sum = 0;
int[] card = new int[n];
for (int i = 0; i < n; i++) {
card[i] = sc.nextInt();
}
for (int i = 0; i < card.length; i++) {
for (int j = i + 1; j < card.length; j++) {
for (int k = j + 1; k < card.length; k++) {
int tempSum = card[i] + card[j] + card[k];
if (tempSum <= m && tempSum > sum) {
sum = tempSum;
}
}
}
}
System.out.println(sum);
}
}
3중 for문을 사용해서 이 문제를 풀 수 있는데, 임시의 tempSum 변수에 card[i]+card[j]+card[k]의 합을 저장한다.
배열에는 입력받은 5 6 7 8 9가 들어있기 때문에 최초의 tempSum에는 5+6+7 = 18이 저장된다.
그 다음에는 5+6+8의 합인 19가 tempSum에 저장되고 19는 m인 21을 넘지 않으며, 기존의 sum인 18보다 크기 때문에 sum에는 19가 저장된다.
이렇게 m보다 작거나 같은 m에 최대한 가까운 카드 3장의 합을 구할 수 있다.