본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 블랙잭 2798 (Javascript,c++)

by Cafe Mocha 2022. 6. 11.

2798번: 블랙잭 (acmicpc.net)

 

2798번: 블랙잭

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

www.acmicpc.net


접근 방법

알고리즘 : Brute force

 

1. 3중 for 문을 통한 완전탐색 (n의 최대값이 100으로 1,000,000번)


Javascript

/**
 * 제출용. 아래 로컬용을 지우고 제출하자.
 */
//  let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n")
/**
 * 로컬용, 예제.txt를 생성해서 예제를 복붙하자.
 */

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split("\n")
    .map((val) => val.trim());

  let [n, m] = input
    .splice(0, 1)[0]
    .split(" ")
    .map((v) => +v);
  let card = input[0].split(" ").map((v) => +v);

  let ans = -9999;
  for (let i = 0; i < n - 2; i++) {
    for (let j = i + 1; j < n - 1; j++) {
      for (let k = j + 1; k < n; k++) {
        let sum = card[i] + card[j] + card[k];
        if (sum > ans && sum <= m) {
          ans = sum;
        }
      }
    }
  }

  console.log(ans);
}

solution();

 


C++

#include <bits/stdc++.h>
using namespace std;



int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

  int n,m;
  cin>>n>>m;
  
  int card[n];
  for(int i=0;i<n;i++){
    cin>>card[i];
  }

  int ans = -9999;
  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++) {
        int sum = card[i] + card[j] + card[k];
        if (sum > ans && sum <= m) {
          ans = sum;
        }
      }
    }
  }

  cout<<ans<<"\n";

}