[백준 | 2798번] 블랙잭

728x90

 

 

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

📝 나의풀이

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int N = scanner.nextInt(); //카드 개수
		int M = scanner.nextInt(); //카드의 합 바운더리
		
		int[] number = new int[N];
		
		for(int i=0; i<N; i++) {
			number[i] = scanner.nextInt();
		}
		 
		int sum = 0; //카드 합
		int answer = 0; //근사치를 담을 값
		
		for(int i=0; i<N; i++ ) {
			for(int j = i+1; j<N; j++ ) {
				for(int k= j+1; k<N; k++) {
					sum = number[i] + number[j] + number[k]; 
					if(answer<sum && sum <=M) {
						answer = sum;
					}
				}
			}
		}
		System.out.println(answer);
	}
}
  • 일단 이 경우 모든 경우의 수를 확인해야한다.
  • 카드를 3개 무조건 뽑아야하기 때문에 3중 for문을 사용한다.
    number 배열의 0번째 인덱스, 1번째 인덱스, 2번째 인덱스 검색 후,
    number 배열의 0번째 인덱스, 1번째 인덱스, 3번째 인덱스 검색 후,
    number 배열의 0번째 인덱스, 1번째 인덱스, 4번째 인덱스 검색 후,
    number 배열의 0번째 인덱스, 2번째 인덱스, 3번째 인덱스 검색 ...
  • 카드를 3장 뽑은 후 세 수를 더했을 때 근사치(answer)보다 크고 바운더리(M)보다 같으면 그 숫자를 새롭게 근사치(answer)에 넣어준다.

ex) 예제 1 number 배열의 (0,1,2), (0,1,3)를 비교 시
(0,1,2)는 5 + 6+ 7 = 18 => 가장 처음 들어가는 숫자이기 때문에 근사치(answer)에 18이 저장
(0,1,3)은 5 + 6+ 8 = 19
18보다는 19가 21에 더 가깝다.
answer에는 18이 들어가 있는 상황 18<19 이고, 19<=M인 경우
answer에는 19를 새로 담는다.

if(answer<sum && sum <=M) {
						answer = sum;
					}
728x90