728x90
반응형
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
문제
내가 푼 코드
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 블랙잭_2798 {
static int N; // 카드의 개수
static int M; // 합
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String nm = br.readLine();
String[] nmArr = new String[2];
nmArr = nm.split("\\s");
N = Integer.parseInt(nmArr[0]);
M = Integer.parseInt(nmArr[1]);
String[] sCardNum = new String[N];
sCardNum = br.readLine().split("\\s");
int[] cardArr = new int[N];
for (int i = 0; i < N; i++) {
cardArr[i] = Integer.parseInt(sCardNum[i]);
}
int max = 0, temp = 0;
boolean[] tf = new boolean[3];
for (int i = 0; i < cardArr.length; i++) {
for (int j = i+1; j < cardArr.length; j++) {
for (int k = j+1; k < cardArr.length; k++) {
temp = cardArr[i] + cardArr[j]+ cardArr[k];
max = M >= temp && temp > max ? temp : max;
}
}
}
System.out.println(max);
} // main
} // class
완전 탐색에 종류가 여러가지가 있지만 해당 문제는 단순한 brute force로 풀었다.
3개의 카드를 조합하여 M 값과 최대한 가까운 값을 구해야 하기 때문에 3중 for문을 돌렸고 중복없이 모든 경우의 수를 다 살피기 위해서 for문에서 바깥에 있는 for문의 증가 값보다 +1 씩 해주었다.
temp라는 임시 변수를 선언해서 M보다 작거나 같고 max 보다 크면 max에 값을 할당하여 최종적으로 max 값을 구하도록 하였다!
728x90
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 최대공약수와 최소공배수 구하기 / 유클리드 호제법 (0) | 2022.08.09 |
---|---|
[백준] 2178번 미로탐색 / 그래프 탐색(BFS/DFS) (0) | 2022.08.06 |
[백준] 2606번 바이러스 / 그래프 탐색(BFS/DFS) (0) | 2022.08.06 |
[백준] 20300번 서강근육맨 / Greedy Algorithm(탐욕법, 그리디 알고리즘) (0) | 2022.07.28 |
[백준] 10870번 피보나치 수 5 / Dynamic Programming(동적계획법) (0) | 2022.07.27 |