알고리즘 문제풀이/백준

#2798 : 블랙잭

모항 2022. 4. 17. 21:12

풀이방법

사용된 것:

TreeSet

브루트포스 알고리즘

 

2022.04.17

가능한 모든 수 3개의 쌍(순서 관계 없이)을 모두 만든 다음, 그 중 합이 m보다 작거나 같은 것들을 모두 TreeSet에 넣는다.

TreeSet은 자동으로 숫자를 오름차순으로 정리하므로, TreeSet의 가장 뒤에 있는 수를 화면에 출력하면 된다.

 

모든 쌍을 점검해야 하므로 브루트포스 알고리즘 문제이다.

 

코드

Java(2022.04.17)

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

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		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[] cards = new int[n];
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i<n; i++) {
			cards[i] = Integer.parseInt(st.nextToken());
		}
		
		//가능한 모든 합 점검하기
		TreeSet<Integer> ts = new TreeSet<Integer>();
		
		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++) {
					//합 중 m보다 작거나 같은 값을 TreeSet에 넣기
					int temp = cards[i] + cards[j] + cards[k];
					if(temp<=m)ts.add(temp);
				}
			}
		}
		
		//합 중 최댓값 출력하기
		System.out.print(ts.last());

	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#11050 : 이항 계수 1  (0) 2022.04.19
#1259 : 팰린드롬수  (0) 2022.04.17
#2164 : 카드2  (0) 2022.04.17
#1978 : 소수 찾기  (0) 2022.04.17
#2609 : 최대공약수와 최소공배수  (0) 2022.04.17