가치투자자

[BOJ] 2798번 : 블랙잭 본문

Problem Solving/BOJ

[BOJ] 2798번 : 블랙잭

미주민 2023. 4. 22. 15:14
728x90
반응형

백준 2798번 : 블랙잭

🔗 문제 링크

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

 

2798번: 블랙잭

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

www.acmicpc.net

 


💬 문제

 브루트포스(완전 탐색, Brute Force) 에 대한 이해가 있다면, 충분히 풀 수 있는 문제다.

 

  1. N개의 양의 정수 카드가 주어질 때, 이 중 3장을 고른다.

  2. 이 3장의 합이 M 이하면서 M에 최대한 가까울 때, 이때의 합을 출력해준다.

 


💡 입력값 받아오기

JavaScript로 풀 경우, 입력값(input)을 어떻게 받아와야 할 지가 중요하다.

이 문제에서는 1번째 줄에 카드 개수 N과 M이 공백을 기준으로 주어진다. 그 다음줄에는 N개의 카드가 공백을 기준으로 주어진다.

N과 M 그리고 그 다음줄에 주어진 카드들을 줄바꿈과 공백을 기준으로 잘라주고, 각각을 정수화해준 다음 N과 M, 카드 배열 cards로 할당해준다.

 

 

입력값을 받아오는 것과 관련해 더 자세한 내용은 아래 링크를 참고 바란다.

https://valueengine.tistory.com/2

 

[BOJ] Node.js로 백준(BOJ) 푸는 법 및 VSCode 환경 세팅

1. Node.js fs모듈 사용법 백준에서 JavaScript로 문제를 풀기 위해선 Node.js를 사용해야 하며, 이때 readline 모듈이나 fs 모듈로 입력값(input)을 받아와야 한다. 이 중 속도나 코드의 길이, 작성 편리성에

valueengine.tistory.com

 

728x90

 


🔑 풀이

  • 총 3장의 카드를 고를 때, 서로 겹치면 안 된다.

    - 따라서 1번째 카드가 i번째일 때, 2번째 카드 j는 i 뒤에 카드여야 하고, k는 j 뒤에 카드여야 한다

    - 또한, 총 N개가 있을 때, 1번째 카드는 뒤에 2개 카드는 될 수 없고, 2번째 카드 역시 뒤에 카드 1개는 될 수 없다

  • 만약 3장의 합이 M과 같아지면 더이상 for문을 돌 필요가 없으므로, M과 같은 sum을 출력해준다.

  • 총합(sum)이 M보다 작은 경우에는 현재 최댓값(max)와 현재 총합을 비교하여 더 큰 max값이 등장했을 때 대체해준다.

// input값 처리
const input = require('fs').readFileSync('/dev/stdin')
  .toString().trim().split(/\s/).map((v) => +v);  // 정수화
[N, M, ...cards] = input;

console.log(solution(N, M, cards));

// 블랙잭 최대값 메소드
function solution(N, M, cards) {
  let max = 0;

  for (let i=0; i < N-2; i++) {      // 1번째 카드
    for (let j=i+1; j < N-1; j++) {  // 2번째 카드
      for (let k=j+1; k < N; k++) {  // 3번째 카드
        let sum = cards[i] + cards[j] + cards[k];

        if (M === sum) {
          return sum;
        } else if (max < sum && sum < M) {
          max = sum;
        }
      }
    }
  }
  return max;
}

 

시간은 다음과 같이 걸렸다.

 

728x90
반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 2002번 : 추월  (0) 2023.05.31
[BOJ] 1075번 : 나누기  (0) 2023.04.25
[BOJ] 3085번 : 사탕 게임  (0) 2023.04.22
[BOJ] 1874번 : 스택 수열  (0) 2023.04.19
[BOJ] 6131번 : 완전 제곱수  (0) 2023.04.16