반응형
🔺 문제
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
🔺 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int n = Integer.parseInt(st.nextToken()); // 카드의 개수
int[] arr = new int[n]; // 카드에 쓰여있는 수 넣을 배열
int goal = Integer.parseInt(st.nextToken()); // 카드 합
st = new StringTokenizer(br.readLine()," ");
for(int i=0 ; i < n ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// 카드 3장의 합 저장할 리스트 생성 (브루트포스)
List<Integer> list = new ArrayList<>();
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++) { // 세 번째 카드
list.add(arr[i] + arr[j] + arr[k]); // 세 카드의 합
}
}
}
int diff = 300000;
int answer = 0;
for(int val : list) {
if((val <= goal) && (goal - val) < diff) {
diff = goal - val;
answer = val;
}
}
System.out.println(answer);
}
}
✅ 해결 아이디어
- 브루트포스 → 3중 for문!
- 카드 3장의 합을 브루트포스로 계산해 리스트에 값을 저장.
- 리스트의 값(=카드 3장의 합)을 목표값과 비교
└ 목표값보다 작거나 같고, (목표값 - 합)이 현재 (목표값 - 값)인 diff 값 보다 작다면, diff를 이 값으로 갱신.
└ answer도 이 때의 카드 3장의 합 값 val로 설정.
🔺 다른 풀이들
- 풀이1)
브루트포스 방법과 백트래킹 방법을 이용해서 푸셨다!
- 풀이2)
백준 2798번 JAVA 자바 블랙잭 [브루트 포스]
카드의 개수 N (3
hellodoor.tistory.com
이 풀이를 보고 나니 나는 굳이 세 카드의 합을 저장할 리스트를 생성할 필요 없이,
삼중 for문 안에서 if문을 활용해 이전 근사치 변수와 비교하면 되는 것이었다...!
- 풀이3)
[백준] 2798번 : 블랙잭 – JAVA [자바]
https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의
propercoding.tistory.com
여기는 삼중 for문 안이 또 약간 다르다.
카드 3개의 합이 m보다 작거나 같을 때 갱신하는데,
(카드 3개의 합 vs 원하는 합)을 Math.max()
를 사용해 근사값을 구했다.
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 11660번: 구간 합 구하기 5 (0) | 2023.04.03 |
---|---|
[백준/JAVA] 11659번: 구간 합 구하기 4 (0) | 2023.04.03 |
[백준/JAVA] 24313번: 알고리즘 수업 - 점근적 표기 1 (0) | 2023.04.01 |
[백준/JAVA] 4344번: 평균은 넘겠지 (0) | 2023.04.01 |
[백준/JAVA] 10757번: 큰 수 A+B (0) | 2023.03.30 |