문제
박스 포장
문제
마트에서 장을 보고 박스를 포장하려고 합니다. 박스를 포장하는 데는 폭이 너무 좁아서, 한 줄로 서 있어야 하고, 들어온 순서대로 한 명씩 나가야 합니다.
불행 중 다행은, 인원에 맞게 포장할 수 있는 기구들이 놓여 있어, 모두가 포장을 할 수 있다는 것입니다. 짐이 많은 사람은 짐이 적은 사람보다 포장하는 시간이 길 수밖에 없습니다.
뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다릴 수밖에 없는 환경입니다. 앞사람이 포장을 끝나면, 포장을 마친 뒷사람들과 함께 한 번에 나가게 됩니다.
만약, 앞사람의 박스는 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 |