섭스토리

백준 2798번 <블랙잭> 본문

백준 풀이 🍪

백준 2798번 <블랙잭>

섭웨이 2022. 8. 18. 14:30

백준 2798번 <블랙잭>

브론즈 2

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

 

2798번: 블랙잭

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

www.acmicpc.net

let [NM, input] = prompt().replace(/\r/gi, "").split("\n");

const N = NM.split(" ")[0] / 1;
const M = NM.split(" ")[1] / 1;
let card = input.split(" ").map((v) => v / 1);

let solve = [];

for (let i = 0; i < N ; i++) {
    for (let j = i + 1; j < N ; j++) {
        for (let k = j + 1; k < N ; k++) {
            if (card[i] + card[j] + card[k] <= M) {
                solve.push(card[i] + card[j] + card[k]);
            }
        }
    }
}

solve.sort((a, b) => {
    return b - a;
});

console.log(solve[0]);

제가 짠 코드입니다.

 

길이가 N인 배열 요소 중 무작위 3개를 더한 값 중 M과 같거나 넘지 않는 제일 큰 수를 구하는 문제였습니다.

 

삼중 반복문을 사용하였습니다.

 

for (let i = 0; i < N ; i++) {
    for (let j = i + 1; j < N ; j++) {
        for (let k = j + 1; k < N ; k++) {
            if (card[i] + card[j] + card[k] <= M) {
                solve.push(card[i] + card[j] + card[k]);
            }
        }
    }
}

좀 무식한 방법이지만 

문제 알고리즘의 분류가 브루트포스 알고리즘으로 되어 있어서 어쩔 수 없이 모든 요소에 대한 반복을 진행했습니다.

 

세 요소의 합이 M을 넘어가지 않으면 solve[]에 넣어줍니다.

그리고 내림차순 정렬을 해서 0번째 인덱스값을 출력!

 

무슨 생각으로 i, j, k 의 범위가 N-1 보다 작다고 설정해놓아서 계속 틀렸었네요..ㅎㅎ

 

 

'백준 풀이 🍪' 카테고리의 다른 글

백준 11866번 <요세푸스 문제 0>  (0) 2022.08.25
백준 4949번 <균형잡힌 세상>  (0) 2022.08.19
백준 1920번 <수 찾기>  (0) 2022.08.16
백준 1259번 <팰린드롬수>  (0) 2022.08.16
백준 1436번 <영화감독 숌>  (0) 2022.08.15