Skip to content

Commit

Permalink
백준/단계별: 블랙잭 문제풀이 (#18)
Browse files Browse the repository at this point in the history
  • Loading branch information
sieunnnn committed Sep 21, 2023
1 parent cd42b8b commit 8672a17
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 0 deletions.
56 changes: 56 additions & 0 deletions src/baekjoon/step/bruteForce/PROB2798.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package baekjoon.step.bruteForce;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class PROB2798 {

/**
* N 장의 카드 중에서 3 장의 카드를 골라야 한다.
* 플레이어가 고른 카드의 합은 M 을 넘지 않으면서 M 과 최대한 가까워야 한다.
* N 이 100 밖에 안되기 때문에 삼중 포문 사용 가능.
*/

static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int N;
static int M;
static int[] numbers;
static int sum;
static ArrayList<Integer> sums;
static int max = Integer.MIN_VALUE;

public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());

st = new StringTokenizer(br.readLine());
numbers = new int[N];
for (int i = 0; i < numbers.length; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}

sums = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j ++) {
for (int k = j + 1; k < numbers.length; k++) {
sum = numbers[i] + numbers[j] + numbers[k];

if (sum <= M) {
sums.add(sum);
}
}
}
}

for (int sum : sums) {
max = Math.max(max, sum);
}

System.out.println(max);
}
}
30 changes: 30 additions & 0 deletions src/baekjoon/step/bruteForce/PROB2798.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 첫째 줄에 카드의 개수 N 과 M 이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어진다.
# 합이 M 을 넘지 않는 카드 3 장을 찾을 수 있는 경우만 입력으로 주어진다.
# N 장의 카드에 써져 있는 숫자가 주어졌을 때, M 을 넘지 않으면서 M 에 최대한 가까운
# 카드 3 장의 합을 구해 출력하시오.

from itertools import combinations

# N 과 M 입력받기
N, M = map(int, input().split())

# 카드에 쓰여 있는 수 입력받기
numbers = list(map(int, input().split()))

# 카드 3개를 뽑는 케이스 구하기 (조합)
combinations = list(combinations(numbers, 3))

# 각 조합의 합을 구하기
sum_combi = []

for combination in combinations:
sum_combi.append(sum(combination))

# M 을 넘지 않으면서 M 에 최대한 가까운 카드 3장의 합을 구하기
meet_condition = []

for sum in sum_combi:
if (M - sum) >= 0:
meet_condition.append(sum)

print(max(meet_condition))

0 comments on commit 8672a17

Please sign in to comment.