본문 바로가기

자료구조

Q의 이해 박스뽑기편

문제


박스 포장

문제

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

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

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

만약, 앞사람의 박스는 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: 여기에 코드를 작성합니다.
  //처음 숫자
  let first=boxes[0]
  //기록 
  let record=0
  //사람 
  let people=0

  //배열의 길이가 줄어들 때까지 박스를 다 확인할거야 
  while(boxes.length){
     // 새로운 next변수에 기존 박스의 첫 번째 요소들을 넣을거야.
     let next=boxes.shift()
    // 만약에 next가 처음요소보다 크면
    if(next>first){
      //레코드 변수에 레코드의 길이와 피플 중 큰거를 추출해서 넣어줘
      record=Math.max(record,people) 
      //사람을 0으로 만들고
      people=0
      //처음숫자가 이제는 next로 바뀜
      first=next
    }

    //사람에 1을 더하자 
    people++



  }
    
  //반복이 다 끝나고 마지막 숫자가 크지 않을경우 if문에 걸리지 않아 
  // MAx 비교가 안되기 때문에 마지막에 한 번더 비교 진행


  return Math.max(record,people)


  
}

 

배운점


1. Q와 while문의 관계 우리가 데이터를 꺼낼 때 가장 먼저 쉽게 꺼내는 방법은 shift() {앞에서부터 꺼내는} 인거를 떠올리자. 

2. shift를 통해서 앞에서부터 데이터가 빠져나가면 데이터의 길이가 0일 때까지 그 작업을 진행할 수 있다

    이를 쉽게 조건을 만족할 때까지 진행하는 while 문과 같이 생각할 수 있다. 

'자료구조' 카테고리의 다른 글

자료구조  (0) 2021.12.07
Tree 개념 이해하기  (0) 2021.10.26
Q의 이해 프린트 작업목록  (0) 2021.10.21
스택의 이해 앞으로 가기 뒤로가기  (0) 2021.10.15
자료구조 기초 스텍 & 큐  (0) 2021.10.08