[ Algorithm ] 백준 2798번 : 블랙잭 - [JAVA]

Minsu Lee·2023년 2월 16일
0

baekjoon

목록 보기
7/16
post-thumbnail
post-custom-banner

🎆백준 2798번 블랙잭🎆


📌문제

🔍문제 설명

문제 링크 : https://www.acmicpc.net/problem/2798

🔍예제 입력

5 21
5 6 7 8 9

🔍예제 출력

21


📌풀이

🔍풀이 설명

Bruteforcing 방식으로 풀이하는 문제이다.

Brute-Force : 완전탐색 알고리즘으로 볼 수 있다. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 이 알고리즘의 강력한 점은 예외 없이 100%의 확률로 정답만을 출력한다.

받은 수를 배열에 저장하고 모든 경우의 수를 더해본다. 3개 수의 합이기 때문에 3중 반복문이 생성된다.

🔍코드

package Bruteforcing;

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

//블랙잭
public class p2798 {
    static int N;
    static int M;
    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());

        st = new StringTokenizer(br.readLine());

        int number[] = new int[N+1];
        for (int i=1; i<=N; i++){
            number[i] = Integer.parseInt(st.nextToken());
        }

        int max= Integer.MIN_VALUE;
        int sum=0;
        //모두 한 번씩 돌아가면서 체크
        for(int i=1; i<=N; i++){
            for (int j=i+1; j<=N; j++){
                for(int k=j+1; k<=N; k++){
                    sum = number[i]+ number[j]+ number[k];
                    if(sum<=M && max<sum){
                        //M을 넘지않고 최대인 수 구하기
                        max = sum;
                    }
                }
            }
        }

        System.out.print(max);

    }
}

👋마무리👋

모든 경우의 수를 봐야하는 건가? 라는 생각을 하면서 시간을 좀 많이 썼던 것 같다. 데이터의 최대 크기가 크지 않아서 괜찮았는뎁.. ㅎㅎ..

profile
빙글빙글
post-custom-banner

0개의 댓글