백준 2797 자바(블랙잭)

정호윤·2023년 3월 6일

자바

목록 보기
14/46

브루트포스 문제다.모든 카드 경우의 수를 따져봐야 한다.


import java.util.*;
import java.io.*;
public class Main {

  
   
    public static void main(String[] args) throws IOException{
       Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
        int sum = sc.nextInt();
        int[] card = new int[number];
        sc.nextLine();

        for(int i=0;i<number;i++){ // 카드값 입력 받음.
            card[i] = sc.nextInt(); 
        }
       int result = search(card,number,sum);
       System.out.println(result);
    }

    public static int search(int[] card,int number,int sum){ // 카드 3개를 합해주는 메서드
        int result = 0; // 더한 값을 저장하는 변수

        for(int i=0;i<number-2;i++){ // 모든 경우의 수를 대입하는 3중 for문.카드가 3개이기에 3개이고 2를 뺀다.
            for(int j=i+1;j<number-1;j++){
                for(int k=j+1;k<number;k++){
                    int temp = card[i] + card[k]+card[j];

                    if(result<temp && temp<=sum){ // sum에 가장 가까운 합을 구하는 코드이다.
                        result =temp;
                    }
                }
            }
        }
        return result;
    }
}

search 메서드가 핵심이다.for문 3개를 돌려서 모든 경우의 수를 다 조합하는게 중요하다.뽑는 카드가 3장이라 3중 for문이며 3장이기에 2를 뺀다.

카드 3장을 더한 값이 result보다 크고 sum보다 같거나 작을시 더해준다.

모든 경우의 수를 다 따져보는 코드를 짜는게 어려운거 같다.

profile
개발자로 취직을 희망합니다.

0개의 댓글