알고리즘 Queue, 박스 포장

e-pong:)·2022년 11월 18일
0

javascript## 박스 포장

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

  • 뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다려야 합니다. 앞사람이 포장을 끝내면, 포장을 마친 뒷사람들과 함께 한 번에 나가게 됩니다.

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

인자 1: boxes
-> Number 타입을 요소로 갖는, 포장해야 하는 박스가 담긴 배열
1 ≤ 사람 수 ≤ 10,000
1 ≤ 박스 ≤ 10,000
출력
-> Number 타입을 리턴해야 합니다.

주의사항

  • 먼저 포장을 전부 끝낸 사람이 있더라도, 앞사람이 포장을 끝내지 않았다면 나갈 수 없습니다.

입출력 예시

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

const boxes2 = [1, 5, 7, 9];
const output2 = paveBox(boxes2);
console.log(output2); // 1

문제풀이

의사코드 작성

function paveBox(boxes) {
    // TODO: 여기에 코드를 작성합니다.

    boxes의 첫 요소를 변수에 할당(now)

    count, max 변수에 1을 할당

    반복문을 이용해 boxes 배열을 순회
    반복문(boxes 배열을 순회){
        if(요소가 now 이하일 경우) {
            count를 1 추가
        }
        else if (요소가 now 보다 클 경우) {
            count를 1로 갱신
            now를 해당 요소로 갱신
        }

        if(max가 count보다 작을경우) {
            max의 값을 count의 값으로 갱
        }
    }
    
    return max;
}

Code

function paveBox(boxes) {
  let now = boxes[0];
  let count, max = 1;

  for(let i = 1; i<boxes.length; i++){
      if(boxes[i] <= now) {
          count++;
      }
      else if (boxes[i] > now) {
          count = 1;
          now = boxes[i];
      }

      if(max < count) {
          max = count;
      }
  }
  return max;
}

Reference

function paveBox(boxes) {
    let answer = [];
    
    while(boxes.length > 0){
        let finishIndex = boxes.findIndex(fn => boxes[0] < fn);
        
        if(finishIndex === -1){
            answer.push(boxes.length);
            boxes.splice(0, boxes.length
        } else {
            answer.push(finishIndex);
            boxes.splice(0, finishIndex);
        }
    }

    return Math.max(...answer);
}
profile
말에 힘이 있는 사람이 되기 위해 하루하루, 성장합니다.

0개의 댓글