[백준] 2798: 블랙잭

    728x90
     

    1927번: 최소 힙

    첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

    www.acmicpc.net

    내 코드

    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner sc = new Scanner(System.in);
    
    		int num = sc.nextInt();
    		int max = sc.nextInt();
    		int result = 0;
    
    		ArrayList<Integer> list = new ArrayList<>();
    
    		for(int i = 0; i < num; i++) {
    		    int n = sc.nextInt();
    		    list.add(n);
    		}
    
    		for(int i = 0; i < list.size(); i++) {
    		    int ele1 = list.get(i);
    		    for(int j = i + 1; j < list.size(); j++) {
    		        int ele2 = list.get(j);
    		        for(int k = j + 1; k < list.size(); k++) {
    		            int ele3 = list.get(k);
    		            int sol = ele1 + ele2 + ele3;
    		            if(sol <= max && sol > result) {
    		                result = sol;
    		            }
    		        }
    		    }
    		}
    
    		System.out.print(result);
    
            
    	}
    }

    문제와 관련된 개념

    브루트 포스 (Brute Force)

    어떤 값을 찾아내기(또는 목적을 달성하기) 위해 무차별적으로 대입해보는 방법.

     

    이 알고리즘의 가장 큰 특징은 가능한 모든 경우의 수를 대입해보며 조건에 만족하는 값만을 찾아낼 수 있다는 점이다.
    결국 자원만 충분하다면 원하는 값을 100% 확률로 찾아낼 수 있다는 것이 매우 크다.

     

    특히나 암호학에서 위 방법은 매우 원초적일 수 있으나 정확도가 100% 이다보니 자원이 무한하면 가장 무서운 방법이기도 하다.
    그렇기에 브루트 포스 알고리즘을 위해 가장 중요한 것은 "빠짐 없이" 완전탐색 알고리즘을 잘 짜야한다는 점이다.

     

    출처
    [백준] 2798번 : 블랙잭 - JAVA [자바]

    문제 풀이

    n번 반복하는 반복문을 통해 n번의 입력값을 받는다. 그 후

    1) 입력값이 0이면 1-1) 큐가 비어있는 경우 0을 출력하고, 1-2) 그렇지 않은 경우 큐의 수를 출력한다.
    2) 입력값이 0이 아닌 경우 2-1) 우선순위 큐에 입력값을 더해준다.

    Trouble Shooting

    처음에 for문 내부 if 문에서 절댓값을 통해 아래와 같이 비교하고자 하였으나, 에러가 발생하였다.
    if(Math.abs(max-sol) < Math.abs(max-result))
    따라서 절댓값이 아닌, max와 result 변수의 값을 이용하여 구하는 것으로 변경하였다.
    if(sol <= max && sol > result)

    느낀점

    3중 for 문을 사용하여 풀었는데, 이보다 간단한 방법으로 풀 수 있지 않을까?라는 아쉬움이 많이 남는다.

     

     

    'Algorithm' 카테고리의 다른 글

    [1일 3알고리즘] Day1  (0) 2024.04.11
    [DP]note 5  (0) 2023.12.03
    [백준] 2309: 일곱 난쟁이  (0) 2023.10.15
    [알고리즘] 점근적 표기법 - 상한 하한 차수  (0) 2023.10.11
    [백준] 7568: 덩치  (0) 2023.07.15

    댓글