코플릿/자료구조

[Queue] 박스 포장

테오구 2021. 10. 30. 19:14
728x90

문제

마트에서 장을 보고 박스를 포장하려고 합니다. 박스를 포장하는 데는 폭이 너무 좁아서, 한 줄로 서 있어야 하고, 들어온 순서대로 한 명씩 나가야 합니다.

불행 중 다행은, 인원에 맞게 포장할 수 있는 기구들이 놓여 있어, 모두가 포장을 할 수 있다는 것입니다. 짐이 많은 사람은 짐이 적은 사람보다 포장하는 시간이 길 수밖에 없습니다.

뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다릴 수밖에 없는 환경입니다. 앞사람이 포장을 끝나면, 포장을 마친 뒷사람들과 함께 한 번에 나가게 됩니다.

만약, 앞사람의 박스는 5 개고, 뒷사람 1의 박스는 4 개, 뒷사람 2의 박스는 8 개라고 가정했을 때, 뒷사람 1이 제일 먼저 박스 포장을 끝내게 되고, 앞사람 1의 포장이 마칠 때까지 기다렸다가 같이 나가게 됩니다.

이때, 통틀어 최대 몇 명이 한꺼번에 나가는지 알 수 있도록 함수를 구현해 주세요.

입력

let boxes = [5, 1, 4, 6];
let output = paveBox(boxes);
console.log(output); // 3

boxes = [1, 5, 7, 9];

output = paveBox(boxes);
console.log(output); // 1

 

 

 

 

function paveBox(boxes) {
  // TODO: 여기에 코드를 작성합니다.
  // boxes의 1번째 값을 초기값으로 설정해준다.
  // box의 배열을 돌면서 초기값보다 작다면 count를 1씩 증가
  // 초기값보다 크면 재귀함수를 이용 
  // 두 카운트를 비교한다.
  // count를 리턴해준다.
  let answer = []

  while(boxes.length > 0){
    let findIndex = boxes.findIndex(fn => boxes[0] < fn)
    // 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다.

    if(findIndex === -1){
      // 만약 찾지 못했다면 answer에 boxes 배열의 길이를 넣은 후, boxes 내부의 요소를 전부 삭제
      answer.push(boxes.length)
      boxes.splice(0, boxes.length)
    }else{
    // 만약 찾았다면, 해당 인덱스를 answer에 넣고, boxes에서 그만큼 제외합니다.
    answer.push(findIndex)
    boxes.splice(0, findIndex)
    }
  }
  return Math.max(...answer)
}
728x90

'코플릿 > 자료구조' 카테고리의 다른 글

[Binary Search Tree] 구현  (0) 2021.10.30
[Graph] adjacency matrix 구현  (0) 2021.10.30
[Queue] 프린터  (0) 2021.10.30
[Graph] 인접 행렬 생성하기  (0) 2021.10.30
[Tree] 구현  (0) 2021.10.30