[백준:2798] 블랙잭 (JAVA)

dev_kiiim·2022년 11월 23일
0

CODING TEST

목록 보기
4/23
post-thumbnail

<오늘의 문제 : 2798번 블랙잭>

기초 알고리즘 중에 하나인 브루트 포스에 대한 문제를 풀어보았다.
오늘 진행했었던 현업자 라이브 특강에서 알려주신 방법대로 풀려고 노력해서 풀어냈다!

예제를 보지않고, 문제만 읽고 푸는 방법인데
처음엔 굉장히 막막했지만 문제를 읽고, 읽고 또 읽으니 길이 보였다,,!!!
사실 브루트 포스가 어떤,, 식으로 되어있는? 풀어야하는? 건지는 잘 모르겠으나 일단 풀어보았다.


public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int N = in.nextInt();
    int M = in.nextInt();

    int[] card = new int[N];
    for(int i=0; i<N; i++){
        card[i] = in.nextInt();
    }

    int gap = 0;
    int gap1 = 300000;
    int sum = 0;
    int sumout = 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 = card[i]+card[j]+card[k];
                if(M-sum<0){
                    continue;
                }else {
                    gap = M - sum;
                    if (gap < gap1) {
                        gap1 = gap;
                        sumout = sum;
                    }
                }
            }
        }
    }
    System.out.println(sumout);
}

너무 무식하게 푼 것 같지만 그래도 풀었으니까,~~,,,~

일단 입력값은 문제에서 주어진 대로 카드 수(N), 카드의 합(M), 각 카드의 수(card[ ])를 입력할 수 있게 선언하고,
주어진 카드 중에서 3장의 합(sum)을 for문으로 돌리면서 sum > M 인 경우에는 넘기고,
M보다 작은 경우에만 sum과 M의 차이를 계산해서
그 차이가 제일 작을때의 sum 값이 출력되도록 만들었다.

두번째 도전만에 성공하였는데,, 사실 지난번 문제에서도 그랬지만,,,
문제를 푸는 과정에서 중간중간 값을 확인하려고 넣어둔 print 때문에,,,,,
거의 뭐 한번에 풀었다고 해도 괜찮을 것 같다!!!

어쩌다보니 푼 문제들의 티어가 다 브론즈2인데,,
조금 올려서 풀어도 괜찮을지도,,?😏

0개의 댓글