Queue, findIndex를 활용한 박스 포장 문제 Javascript

cptkuk91·2022년 8월 20일
2

Algorithm

목록 보기
70/161
post-custom-banner

문제

마트에서 장을 보고 박스를 포장하려고 합니다. 박스를 포장하는 데는 폭이 너무 좁습니다. 그렇기에 한 줄로 서 있어야 하고, 들어온 순서대로 한 명씩 나가야 합니다.
불행 중 다행은, 인원에 맞게 포장할 수 있는 기구들이 놓여 있어, 모두가 포장을 할 수 있다는 것입니다. 짐이 많은 사람은 짐이 적은 사람보다 포장하는 시간이 길 수밖에 없습니다.
뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다려야 합니다. 앞사람이 포장을 끝내면, 포장을 마친 뒷사람들과 함께 한 번에 나가게 됩니다.
만약, 앞사람의 박스는 5 개고, 뒷사람 1의 박스는 4 개, 뒷사람 2의 박스는 8 개라고 가정했을 때, 뒷사람 1이 제일 먼저 박스 포장을 끝내게 되어도 앞사람 1의 포장이 마칠 때까지 기다렸다가 같이 나가게 됩니다.
이때, 통틀어 최대 몇 명이 한꺼번에 나가는지 알 수 있도록 함수를 구현해 주세요.

주의 사항

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

예시

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 solution (boxes){
	let result = [];
    
    while(boxes.length > 0){
    	let checkBoxes = boxes.findIndex((el) => el > boxes[0]);
        
        // checkBoxes가 -1 리턴한다는 건 조건에 맞는게 없다는 뜻이다.
        if(checkBoxes === -1){
        	result.push(boxes.length);
            boxes.splice(0, boxes.length);
        } else {
        	result.push(checkBoxes);
            boxes.splice(0, checkBoxes);
        }
    }
    return Math.max(...result);
}
  • findIndex() 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다. 만족하는 요소가 없으면 -1을 반환합니다.

우선 findIndex()에 대한 이해가 필요합니다.
findIndex를 통해 checkBox로 기준을 잡아주고, -1반환하는 경우 조건을 만족하는 경우가 없는 경우이기 때문에 전체를 넣어줍니다.

반대로 조건을 만족하는 경우가 있다면 result에 checkBoxes를 넣어준 후 결과물을 반환합니다.

중요한 부분은 result가 배열이기 때문에 Math.max(...reult)를 통해야 합니다.

Math.max(result)를 할 경우 배열이기 대문에 NaN을 반환합니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글