[백준] 블랙잭 2798번

public class Blackjack {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);

        int[] cards = new int[N];
        String[] inputNums = br.readLine().split(" ");
        for(int i = 0; i < N; i++) {
            cards[i] = Integer.parseInt(inputNums[i]);
        }

        int answer = 0;
        first: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++) {
                    int sum = cards[i] + cards[j] + cards[k];
                    if(sum > M) continue;
                    if(sum == M) {
                        answer = sum;
                        break first;
                    } else if(sum < M) {
                        answer = Math.max(sum, answer);
                    }
                }
            }
        }

        System.out.println(answer);
    }
}
  • 카드의 개수와 최대값을 입력받는다.
  • 카드 번호를 입력받을 배열을 카드의 개만큼 사이즈를 만들어주고, 카드 번호를 입력받는다.
  • 3장의 카드를 더해야 하기 때문에, 3중 반복문을 돌면서, 합을 구해준다. 합이 최대값과 같다면 최고로 만족하는 수이기 때문에, answer의 값을 바꿔주고, 반복을 종료한다. 제일 처음 for 문에 별명을 주어서, 전체 for 문을 탈출하도록 하면, 더 빨리 끝낼 수 있다.
  • 최대값과 같은 숫자가 나오지 않는다면 3장의 카드의 합이 더 클 경우에는 볼 필요가 없기 때문에 바로 다음으로 넘어가기 위해 continue 를해주고, 작을 경우 최대값과 가장 가까운 수를 구해야하기 때문에, Math.max() 를 사용해서 최대값보다 작은 숫자 중에 큰 수를 구해준다.

0개의 댓글