코딩테스트/백준

[코테] 백준 2798번 : 블랙잭 (java)

developer of the night sky 2023. 11. 22. 23:03

❓문제

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 


🔅해석

 

이 문제는 브루트포스 알고리즘에 속하므로 완전 탐색을 하는 문제이다.

그도 그럴것이 주어진 카드의 경우의 수를 다 더해가면서 최대 값을 넘지 않으면서 가장 가까운 값을 찾아야 할 것이다.

 

그래서 단순하게 for문을 다중으로 돌면서 숫자를 더해줬다.


⭕정답 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
        //입력받는 카드 배열
		int[] arr = new int[n];
		
		st = new StringTokenizer(br.readLine());
		
		//n개 요소 배열 담기
		for (int i=0; i<n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
        //3장의 카드 더하고 그 중 최대값 m을 넘지않는 최대값 구하기 
		int result = 0, sum=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++) {
					sum = arr[i] + arr[j] + arr[k];
					if (sum<=m) {
						result = Math.max(sum, result);
					}
				}
			}
		}
		System.out.println(result);
	}
}

 


❗결과