코딩테스트/자바 문제풀이

[CLASS 2: 브루트포스] 백준 2798 블랙잭

승요나라 2024. 10. 6. 19:02

2798번: 블랙잭

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

 

# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        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[] card = new int[n];
        for (int i = 0; i < n; i++) {
            card[i] = Integer.parseInt(st.nextToken());
        }

        // 세 카드의 합 계산
        ArrayList<Integer> sumOfThree = new ArrayList<>();
        int a, b, c;
        for (int i = 0; i < n-2; i++) {
            a = card[i];
            for (int j = i+1; j < n-1; j++) {
                b = card[j];
                for (int k = j+1; k < n; k++) {
                    c = card[k];
                    sumOfThree.add(a+b+c);
                }
            }
        }

        // sumOfThree 리스트 정렬
        Collections.sort(sumOfThree);

        int result = -1;
        for (int i = 0; i < sumOfThree.size(); i++) {
            if (sumOfThree.get(i) <= m) {
                result = sumOfThree.get(i);
            } else {
                break;
            }
        }

        System.out.println(result);
        br.close();
    }
}
  • 브루트 포스(brute force) : 키 전수조사(exhaustive key search) 또는 무차별 대입(無差別代入) 공격이라고도 불리며 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 흔히 암호학에서 연구되나, 알고리즘 분야에서도 사용되고 있다.
  • 즉, 단순무식하게 수학 문제를 푸는 방법인 '계산 노가다'이다.
  • 우리는 그냥 컴퓨터에게 시키면 된다. ( ̄y▽ ̄)╭ so easy