[Java] 백준 2798번 블랙잭

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

 

2798번: 블랙잭

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

www.acmicpc.net

 

Brute Force를 이용해 풀이해보았다:)

 

package com.bruteforce;

import java.io.*;
import java.util.*;

public class B2798 {
	static int N, M; // 카드의 갯수, 기준이 되는 숫자
	static int[] card; // 카드 숫자
	static int max; // 기준이 되는 숫자에 가장 근접한 숫자
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		card = new int[N];
		
		// 카드 숫자 입력받기
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			card[i] = Integer.parseInt(st.nextToken());
		}
        
		// max값 초기화
		max = 0;
        
		// 각 카드는 중복사용이 불가능
		for(int i=0; i<N-2; i++) { // 1번 카드
			for(int j=i+1; j<N-1; j++) { // 2번 카드
				for(int k=j+1; k<N; k++) { // 3번 카드
					int sum = card[i] + card[j] + card[k]; // 숫자의 합
					if(sum <= M && sum > max) { // 숫자의 합이 M보다 작거나 같고 max보다 클때
						max = sum; // max값 갱신
					}
				}
			}
		}
		System.out.println(max);
	}

}

 

BELATED ARTICLES

more