[BOJ] 2798. 블랙잭

김휴지 ㅣ 2023. 5. 18. 04:45

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

 

2798번: 블랙잭

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

www.acmicpc.net


접근 방법

카드 세 장의 합을 내면 되므로 3 중첩 반복문을 사용했다.

반복문만 해도 O(N^3) 라서 부담스러운 건 사실이다.

조합 문제니까 아마 내가 애용하는 백트래킹도 가능할 듯하다.

 

소스 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int M = scan.nextInt();
        int min = 0;
        int[] cards = new int[N];
        for(int i=0; i<N; i++)
            cards[i] = scan.nextInt();
        
        for(int i=N-1; i>1; i--)
            for(int j=i-1; j>=0; j--)
                for(int k=j-1; k>=0; k--) {
                    int sum = cards[i] + cards[j] + cards[k];
                    if(M >= sum && min < sum)
                        min = sum;
                }
        System.out.println(min);
    }
}

'코테 > 자바' 카테고리의 다른 글

[BOJ] 18870. 좌표 압축  (0) 2023.05.18
[BOJ] 7568. 덩치  (2) 2023.05.18
[BOJ] 10870. 피보나치 수 5  (0) 2023.05.18
[BOJ] 1978. 소수 찾기  (0) 2023.05.18
[BOJ] 16171. 나는 친구가 적다 (Small)  (0) 2023.05.18