티스토리 뷰
1. 개념
- 줄을 서서 기다리는 구조
- Stack과 반대되는 개념으로 먼저 들어간 데이터가 먼저 나옴
*FIFO(First In First Out) 혹은 LILO(Last In Last Out) - 컴퓨터 장치들 사이에서 데이터(data)를 주고 받을 때, 각 장치 사이에 존재하는 속도의 차이나 시간 차이를 극복하기 위해 임시 기억 장치의 자료구조로 Queue를 사용
*이 과정을 버퍼(buffer)라고 함 - while 반복문과 짝궁
2.구조
const queue = []
queue.push(1) // [1]
queue.push(2) // [1, 2]
queue.push(3) // [1, 2, 3]
queue.push(4) // [1, 2, 3, 4]
queue.push(5) // [1, 2, 3, 4, 5]
// FIFO(First In First Out)
queue.shift() // [2, 3, 4, 5]
queue.shift() // [3, 4, 5]
queue.shift() // [4, 5]
queue.shift() // [5]
// LILO(Last In Last Out)
박스 포장
문제
마트에서 장을 보고 박스를 포장하려고 합니다. 박스를 포장하는 데는 폭이 너무 좁습니다. 그렇기에 한 줄로 서 있어야 하고, 들어온 순서대로 한 명씩 나가야 합니다.
불행 중 다행은, 인원에 맞게 포장할 수 있는 기구들이 놓여 있어, 모두가 포장을 할 수 있다는 것입니다. 짐이 많은 사람은 짐이 적은 사람보다 포장하는 시간이 길 수밖에 없습니다.
뒷사람이 포장을 전부 끝냈어도 앞사람이 끝내지 못하면 기다려야 합니다. 앞사람이 포장을 끝내면, 포장을 마친 뒷사람들과 함께 한 번에 나가게 됩니다.
만약, 앞사람의 박스는 5 개고, 뒷사람 1의 박스는 4 개, 뒷사람 2의 박스는 8 개라고 가정했을 때, 뒷사람 1이 제일 먼저 박스 포장을 끝내게 되어도 앞사람 1의 포장이 마칠 때까지 기다렸다가 같이 나가게 됩니다.
이때, 통틀어 최대 몇 명이 한꺼번에 나가는지 알 수 있도록 함수를 구현해 주세요.
입력
인자 1 : boxes
- Number 타입을 요소로 갖는, 포장해야 하는 박스가 담긴 배열
- 1 ≤ 사람 수 ≤ 10,000
- 1 ≤ 박스 ≤ 10,000
출력
- Number 타입을 리턴해야 합니다.
주의 사항
- 먼저 포장을 전부 끝낸 사람이 있더라도, 앞사람이 포장을 끝내지 않았다면 나갈 수 없습니다.
예시
만약 5, 1, 4, 6이라는 배열이 왔을 때, 5개의 박스를 포장하는 동안 1, 4 개의 박스는 포장을 끝내고 기다리게 되고, 6 개의 박스는 포장이 진행 중이기 때문에, 5, 1, 4 세 개가 같이 나가고, 6이 따로 나가게 됩니다. 그렇기에 최대 3 명이 같이 나가게 됩니다.
const boxes = [5, 1, 4, 6];
const output = paveBox(boxes);
console.log(output); // 3
const boxes2 = [1, 5, 7, 9];
const output2 = paveBox(boxes);
console.log(output2); // 1
function paveBox(boxes) {
// TODO: 여기에 코드를 작성합니다.
let que = [...boxes]
let compare = []
//비교할 무언가를 만들어준다.
//카운트가 필요한 이유? <- 결과는 결국 카운트된값이다.
let count =1;
//현재값이 필요하다. que는 항상 shift와 pop등이 필요하다.
let now = que.shift()
while(que.length>0){
if(now >=que[0]){
count ++
que.shift()
}else{
compare.push(count)
count = 1;
now = que.shift()
}
}
compare.push(count)
return Math.max(...compare)
}
'Javascript > [자료구조] 자료구조 기초' 카테고리의 다른 글
[Graph] 인접 행렬 길찾기 : 깊이우선탐색(DFS) (0) | 2021.12.17 |
---|---|
[Graph] 인접 행렬 길찾기 : 너비 우선 탐색(BFS) (0) | 2021.12.17 |
[Graph] 너비 우선 탐색(BFS) /깊이우선탐색(DFS) (0) | 2021.11.29 |
Stack (0) | 2021.11.28 |
[자료구조]stack & queue (브라우저 동작원리),event loop (0) | 2021.11.28 |