본문 바로가기

Algorithm/[BOJ]

[Java] 백준 2798번 : 블랙잭

 

 

 

 

접근 방법

nC3을 어떻게 할 지 고민을 많이 했다

설마 반복문 다 돌릴려나? 싶었는데 진짜였다

브루트포스 알고리즘은 진짜 다 해보는 알고리즘이였구나..

 

sum>temp && sum <= M을 조건을 넣어서 새로운 최대값 계속 갱신 해야한다

 

 

정답 코드

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

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine());
        br.readLine();

        // 배열에 카드 숫자들 입력 받기
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int sum = 0; // 합
        int temp =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 = arr[i] + arr[j] + arr[k];
                    if(sum > temp && sum <= M) // 현재 합(sum)이 이전의 최대 값 temp보다 크고, 주어진 값 M보다 작거나 같을 때,
                        temp = sum; // update
                }
            }
        }
        bw.write(temp + "\n");
        bw.flush();
        bw.close();
    }
}

 

+ 사담

오랜만에 올리는 포스팅입니다

오픽 점수랑 정보처리기사 필기 합격 만들어왔습니다

상반기 파이팅입니다!