2798 블랙잭

const fs = require('fs');
const [N, M, ...numbers] = fs.readFileSync('dev/stdin').toString().trim().split(/\s+/);

const nums = numbers.map(Number);
const nums_arr = [];

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 = nums[i] + nums[j] + nums[k];
      if (sum <= M) {
        nums_arr.push(sum);
      }
    }
  }
}

console.log(Math.max(...nums_arr));

/\s+/ 는 모든 공백을 없애는 정규식이다.

삼중 반복문을 통해 모든 경우의 수를 체크 할 수 있다.

단, j 와 k 변수를 사용하는 반복문의 시작 점은 상위 반복문보다 + 1이 되어야 하며, 그렇지 않을경우 너무 많은 경우의 수를 체크해야하기 때문에 시간초과기 일어날 수 있다. 또는 이미 체크한 수를 또 체크할 수 있다.\

세개의 수를 합한 값들을 nums_arr 배열에 저장해 최종적으로 최댓값을 반환하는 Math.max 메소드를 사용했다.