<오늘의 문제 : 2798번 블랙잭>
기초 알고리즘 중에 하나인 브루트 포스에 대한 문제를 풀어보았다.
오늘 진행했었던 현업자 라이브 특강에서 알려주신 방법대로 풀려고 노력해서 풀어냈다!
예제를 보지않고, 문제만 읽고 푸는 방법인데
처음엔 굉장히 막막했지만 문제를 읽고, 읽고 또 읽으니 길이 보였다,,!!!
사실 브루트 포스가 어떤,, 식으로 되어있는? 풀어야하는? 건지는 잘 모르겠으나 일단 풀어보았다.
public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int M = in.nextInt(); int[] card = new int[N]; for(int i=0; i<N; i++){ card[i] = in.nextInt(); } int gap = 0; int gap1 = 300000; int sum = 0; int sumout = 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 = card[i]+card[j]+card[k]; if(M-sum<0){ continue; }else { gap = M - sum; if (gap < gap1) { gap1 = gap; sumout = sum; } } } } } System.out.println(sumout); }
너무 무식하게 푼 것 같지만 그래도 풀었으니까,~~,,,~
일단 입력값은 문제에서 주어진 대로 카드 수(N), 카드의 합(M), 각 카드의 수(card[ ])를 입력할 수 있게 선언하고,
주어진 카드 중에서 3장의 합(sum)을 for문으로 돌리면서 sum > M 인 경우에는 넘기고,
M보다 작은 경우에만 sum과 M의 차이를 계산해서
그 차이가 제일 작을때의 sum 값이 출력되도록 만들었다.
두번째 도전만에 성공하였는데,, 사실 지난번 문제에서도 그랬지만,,,
문제를 푸는 과정에서 중간중간 값을 확인하려고 넣어둔 print 때문에,,,,,
거의 뭐 한번에 풀었다고 해도 괜찮을 것 같다!!!
어쩌다보니 푼 문제들의 티어가 다 브론즈2인데,,
조금 올려서 풀어도 괜찮을지도,,?😏