블랙잭 (백준 2798번)

박영준·2023년 5월 28일
0

코딩테스트

목록 보기
158/300

메모

/*
조건 1 : N 장 中 3장 고르기		(N : 바닥에 깔린 카드들) (3 ≤ N ≤ 100)
조건 2 : 고른 카드의 합 < M		(M : 딜러가 외친 숫자) (10 ≤ M ≤ 300,000)
조건 3 : 조건 2 中 가장 큰 수

카드 3장의 합은?
*/

해결법

방법 1

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
		
		int N = in.nextInt();		// 전체 카드
		int M = in.nextInt();		// 딜러가 외친 숫자
 
		int[] arr = new int[N];
 
		for (int i = 0; i < N; i++) {		// arr 배열에 전체 카드를 담는다
			arr[i] = in.nextInt();
		}
		
		int result = search(arr, N, M);		// search() 메소드 실행
		System.out.println(result);
	}
 
	
	// 탐색
	static int search(int[] arr, int N, int M) {
		int result = 0;			// 카드 3장의 합을 저장해두는 변수
 
		for (int i = 0; i < N - 2; i++) {		// 3개를 고르기 때문에 첫번째 카드는 N - 2 까지만 순회
			for (int j = i + 1; j < N - 1; j++) {		// 두 번째 카드는 첫 번째 카드 다음부터 N - 1 까지만 순회
				for (int k = j + 1; k < N; k++) {		// 세 번째 카드는 두 번째 카드 다음부터 N 까지 순회
					
					int sum = arr[i] + arr[j] + arr[k];		// 카드 3개의 합
					
					// M == 카드의 합 일 경우, sum 을 리턴 -> 구하고자 했던 값이 아님
					if (M == sum) {	
						return sum;
					}
					
					// 이전 카드의 합 < 세 카드의 합 && 세 카드의 합 < M 일 경우 
					if (result < sum && sum < M) {
						result = sum;		// result 갱신
					}
				}
			}
		}
		 
		return result;
	}
}

참고: [백준] 2798번 : 블랙잭 - JAVA [자바]


블랙잭 (백준 2798번)

profile
개발자로 거듭나기!

0개의 댓글