찬우는 친구들과 고양이 카페에 가려 한다.
고양이 카페에는 N마리의 고양이가 있다.
i번째 고양이의 무게는 w_i이다. 찬우와 친구들은 모두 고양이를 사랑하기 때문에 무릎 위에 고양이를 정확히 2마리 데리고 있으면 행복해진다. 하지만 허약한 찬우와 친구들은 데리고 있는 두 고양이의 무게의 합이 K를 넘는다면 버티지 못할 것이다.
각 고양이의 무게와 한 명이 버틸 수 있는 최대 무게 K가 주어질 때 최대 몇 명이 행복해질 수 있는지 구해보자.
첫째 줄에 정수 N과 K가 공백으로 구분되어 주어진다. (1 <= N <= 5,000) / (1 <= K <= 10^9)
둘째 줄에는 각 고양이의 무게를 의미하는 N개의 정수 w_1, w_2, ..., w_N이 공백으로 구분되어 주어진다. (1 <= w_i <= K)
행복해질 수 있는 사람의 수의 최댓값을 출력한다.
5 20
8 16 11 2 4
2
const fs = require('fs');
let [n, input] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');
let N = Number(n.trim().split(' ')[0]);
let K = Number(n.trim().split(' ')[1]);
let weights = input.trim().split(' ').map(Number);
weights.sort((a, b) => b - a);
let start = 0;
let end = 0;
let count = 0;
for (let i = 0; i < N - 1; i++) {
start = i;
end = start + 1;
while (true) {
if (end === weights.length) break;
if (weights[start] < K) {
if (weights[start] + weights[end] <= K) {
weights[start] = K + 1;
weights[end] = K + 1;
count++;
break;
}
}
end++;
}
}
console.log(count);
실제 제출에서는 break를 빼먹었음에도 성공했다. 생각보다 컷이 빡세지는 않은 것 같다. 물론 K+1로 바꿔주면서 if문에 해당하는 경우가 나오지 않았지만.. 그래도 쓸데없이 end값을 계속 증가시켜주었을텐데.. 당연한 것들이라 놓치는 것들이 많다. 그래놓고 틀렸으면 멘탈이 나갔을테지... 문제를 풀 때 실수를 빨리 줄여야 하는데...