https://www.acmicpc.net/problem/2798
const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim()
const solution = (input) => {
const [a, b] = input.split('\n')
const max = a.split(' ')[1]
const nums = b.split(' ').map(Number)
let arr = []
for(let i=0; i<nums.length-2; i++){
for(let j=i+1; j<nums.length-1; j++){
for(let k=j+1; k<nums.length; k++){
const sum = nums[i] + nums[j] + nums[k]
if(sum <= max) arr.push(sum)
}
}
}
return arr.sort((a,b)=>a-b)[arr.length-1]
}
console.log(solution(input))
주어진 카드nums
에서 3장을 뽑아max
값이하의 최대값을 반환하기.
어떻게 풀어야 하나 막막했는데 알고보니 모든 경우의 수를 탐색하는 완전탐색 알고리즘(브루트포스 알고리즘
)으로 간단히 풀 수 있었다.
숫자의 오름차순을 계산해야 하므로 sort()
가 아닌 sort((a,b)=>a-b)
를 사용해야한다는 것을 유념하자