본문 바로가기
Algorithm/백준

백준 배 1092 javascript

by eclipse7727 2022. 8. 24.
 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net

 

예제4

 

예제 4번
10 // N 크레인 개수 
11 17 5 2 20 7 5 5 20 7 // 크레인이 들 수 있는 무게 배열
5 // 박스 개수
18 18 15 15 17 // 박스들의 무게

 

 

무게 제한이 있는 N 개의 크레인으로 

M개의 박스를 몇분안에 옴길 수 있는가?

각 박스의 무게는 따로 주어진다.

 

크레인 N개의 배열을 오름차순으로 정렬하고 

박스 M개 배열을 오름차순으로 정렬한다.

 

들 수 있는 무게가 제일 큰 크레인에게 가장 큰 무게를 가진 박스부터 옴기게 한다.

옴길 수 있으면 그 다음 큰 무게를 들 수 있는 크레인에게 다음으로 무거운 박스를 들게 한다.

그러다가 못들게 되면 

예제 4처럼 다음 줄(분) 으로 넘기면 된다.

 

const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `2
19 20
7
14 12 16 19 16 1 5`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const N = +input();
const crain = input()
  .trim()
  .split(" ")
  .map((v) => +v);
const M = +input();
const boxes = input()
  .trim()
  .split(" ")
  .map((v) => +v);
crain.sort((a, b) => a - b);
boxes.sort((a, b) => a - b);

if (crain.slice(-1)[0] < boxes.slice(-1)[0]) {
  console.log(-1);
  return;
}

let answer = 0;
while (boxes.length > 0) {
  for (let i = N - 1; i >= 0; i--) {
    for (let j = boxes.length - 1; j >= 0; j--) {
      if (crain[i] >= boxes[j]) {
        boxes.splice(j, 1);
        break;
      }
    }
  }
  answer++;
}
console.log(answer);​

 

반응형

댓글