본문 바로가기

백준

[백준][JAVA]블랙잭(2798번) - 브루트 포스 algorithm

반응형

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

 

2798번: 블랙잭

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

www.acmicpc.net

* 문제는 해당 게시물 참고바랍니다.

 

브루트 포스 algorithm이란 모든 경우의 수를 탐색한다는 뜻으로,

완전탐색이라고 하며, 해당 알고리즘의 가장 기본적인 접근방식은 해가 존재할 것으로 예상되는 모든 영역을 전부 탐색하는 것입니다.

 

해당 문제를 해결한 방법입니다.

import java.util.*;
public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int sum=0;
        int result =0;;

        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int []array = new int[n];
        for(int i=0; i<n;i++){
            array[i] = scanner.nextInt();
        }


        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                for(int k=j+1;k<n;k++){
                    sum = array[i]+array[j]+array[k];
                    if(sum<=m && sum>result){
                        result = sum;
                    }
                }
            }
        }
        System.out.println(result);
    }
}

저는 이렇게 작성하였습니다.

 

숫자를 입력받는 방식에서

String input = scanner.nextLine();
int n = Integer.parseInt(input);

저는 이렇게 하는 방식을 선호하나, 단순한 문제인만큼 코드를 최대한 간결하기 위해 해당 방식은 사용하지 않았습니다.

 

반응형