Algorithm/BOJ

[알고리즘/백준/2798] 블랙잭

개발자 김비숑 2023. 5. 31. 23:22
반응형

문제


https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 

풀이


#1

 const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let [nums, arr] = fs.readFileSync(filePath).toString().trim().split("\n");

const [N, M] = nums.split(" ").map(Number);
const cards = arr.split(" ").map(Number);
let minVal = Number.MAX_SAFE_INTEGER;
let diff = Number.MAX_SAFE_INTEGER;
let answer = 0;

for (let i = 0; i < N; i++) {
  for (let j = 0; j < N; j++) {
    if (i === j) continue;
    for (let k = 0; k < N; k++) {
      if (k === j || k === i) continue;
      const sum = cards[i] + cards[j] + cards[k];
      diff = M - sum;

      if (diff < 0) continue;
      if (diff < minVal) {
        minVal = diff;
        answer = sum;
      }
    }
  }
}

console.log(answer);

 

#2

const [N, M] = nums.split(" ").map(Number);
const cards = arr.split(" ").map(Number);
let answer = Number.MIN_SAFE_INTEGER;


for (let i = 0; i < N; i++) {
  for (let j = i + 1; j < N; j++) {
    for (let k = j + 1; k < N; k++) {
      const sum = cards[i] + cards[j] + cards[k];
      if (sum > M) continue;

      answer = Math.max(answer, sum);
    }
  }
}

console.log(answer);
반응형