๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
the others/Algorithm

[ Queue ] ํ”„๋ฆฐํ„ฐ

by ciocio 2021. 10. 9.

๐Ÿ“  ์ œํ•œ ์‚ฌํ•ญ

 

โœ”  ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์€ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”  ๊ฐ ์นธ์—๋Š” ํ•œ ๊ฐœ์˜ ๋ฌธ์„œ๋งŒ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”  ๋ฌธ์„œ๋Š” 1์ดˆ์— ํ•œ ์นธ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ”  ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์˜ ํฌ๊ธฐ๋Š” bufferSize์ด๊ณ  ์ตœ๋Œ€ ์šฉ๋Ÿ‰ capacities ๋งŒํผ ๋ฌธ์„œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ“  ์˜ˆ์‹œ

 

๋งŒ์•ฝ, ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์˜ ํฌ๊ธฐ๊ฐ€ 2์ด๊ณ  ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด 10Kib๋ผ๋ฉด ํฌ๊ธฐ๊ฐ€ [7, 4, 5, 6] Kib์ธ ๋ฌธ์„œ๋“ค์ด ์ตœ๋‹จ ์‹œ๊ฐ„ ์•ˆ์— ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋‘ ์ธ์‡„๋˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. 1์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—๋Š” 7Kib ํฌ๊ธฐ์˜ ๋ฌธ์„œ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  2. 2์ดˆ์ผ ๋•Œ ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์ด 10Kib์ด๊ธฐ ๋•Œ๋ฌธ์— 4Kib ๋ฌธ์„œ๋Š” ์ž‘์—… ๋ชฉ๋ก์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— 7Kib ๋ฌธ์„œ๋Š” ์ž‘์—… ๋ชฉ๋ก์—์„œ 1์นธ ์•ž์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. 3์ดˆ์ผ ๋•Œ 7Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ ๋‚˜์™€ ํ”„๋ฆฐํ„ฐ๊ฐ€ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— 4Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  4. 4์ดˆ์ผ ๋•Œ 4Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ 1์นธ ์•ž์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— 5Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  5. 5์ดˆ์ผ ๋•Œ 4Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ ๋‚˜์™€ ํ”„๋ฆฐํ„ฐ๊ฐ€ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— 5Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ 1์นธ ์•ž์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์šฉ๋Ÿ‰ 10Kib ์ œํ•œ์œผ๋กœ 6Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์œผ๋กœ ์ถ”๊ฐ€๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  6. 6์ดˆ์ผ ๋•Œ 5Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ ๋‚˜์™€ ํ”„๋ฆฐํ„ฐ๊ฐ€ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— 6Kib ๋ฌธ์„œ๊ฐ€ ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  7. 7์ดˆ์ผ ๋•Œ 6Kib ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… ๋ชฉ๋ก์—์„œ 1์นธ ์•ž์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  8. 8์ดˆ์ผ ๋•Œ 6Kib ๋ฌธ์„œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ์™€ ๊ฐ™์ด ๋ชจ๋“  ๋ฌธ์„œ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์€ 8์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

 

 

๐Ÿ“  ์ฝ”๋“œ ๊ณต๋ถ€

 

// ์›ํ•˜๋Š” ์ง„ํ–‰

// [0. 7]  ํ˜„์žฌ ๋ฌธ์„œ:7
// [7, 0]  ํ˜„์žฌ ๋ฌธ์„œ:4 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ์ดˆ๊ณผ & ์ž‘์—… ๋ชฉ๋ก ์ด๋™        arr.shift(), arr.push(0)
// [0, 4]  ํ˜„์žฌ ๋ฌธ์„œ:4 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ํ†ต๊ณผ & ์ง„์ž…                arr.shift(), arr.push(cur)
// [4, 5]  ํ˜„์žฌ ๋ฌธ์„œ:5 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ํ†ต๊ณผ & ์ง„์ž… + ์ž‘์—… ๋ชฉ๋ก ์ด๋™  arr.shift(), arr.push(cur)  
// [5, 0]  ํ˜„์žฌ ๋ฌธ์„œ:6 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ์ดˆ๊ณผ & ์ž‘์—… ๋ชฉ๋ก ์ด๋™        arr.shift(), arr.push(0)     
// [0, 6]  ํ˜„์žฌ ๋ฌธ์„œ:6 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ํ†ต๊ณผ & ์ง„์ž…                arr.shift(), arr.push(cur)
// [6, 0]  ํ˜„์žฌ ๋ฌธ์„œ:6 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ํ†ต๊ณผ & ์ž‘์—… ๋ชฉ๋ก ์ด๋™        arr.shift(), arr.push(0)
// [0, 0]  ํ˜„์žฌ ๋ฌธ์„œ:6 -> ์šฉ๋Ÿ‰ ํฌ๊ธฐ ํ†ต๊ณผ & ์ž‘์—… ๋ชฉ๋ก ์ด๋™        arr.shift(), arr.push(0)

// ํ˜„์žฌ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ํ–‰์œ„๋Š”
// arr.shift() ๊ณผ 
// 01 ์šฉ๋Ÿ‰ ํฌ๊ธฐ๊ฐ€ ์ดˆ๊ณผ๋˜์—ˆ์„ ๋•Œ arr.push(0)
// or
// 02 ์šฉ๋Ÿ‰ ํฌ๊ธฐ๊ฐ€ ํ†ต๊ณผ๋˜์—ˆ์„ ๋•Œ arr.push(ํ˜„์žฌ ๋ฌธ์„œ) ์ด๋‹ค.

 

function Printer (bufferSize, capacities, documents) {
  
  let count = 0;
  let total = 0;
  let cur = documents.shift();
  let buffer = new Array(bufferSize).fill(0);
  
  buffer.shift();
  buffer.push(cur);
  total = total + cur;
  count++;
  
  while(total){
  	
    total = total - buffer.shift();
    
    cur = documents.shift();
    
    if(total + cur <= capacities){
    
      buffer.push(cur);
      total = total + cur;
    
    }
    else{
    
      documents.unshift(cur);
      buffer.push(0);
    
    }
    
    count++;
  }
  
  return count;
  
}

 

 

๐Ÿ“  ํ’€๋ฉด์„œ ๋Š๋‚€์ 

 

์ƒ๊ฐ๋ณด๋‹ค ๋‚ด ๋ง˜์ฒ˜๋Ÿผ queue ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š์•˜๋‹ค.

๋จธ๋ฆฟ์†์—์„œ ๊ทธ๋ ค๋ณด๋Š” ๊ฒƒ๋„ ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ ธ๊ณ  ...

์ €๋ ‡๊ฒŒ ๋™์ž‘ ๊ณผ์ •์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋ฉด์„œ ์›ํ•˜๋Š” ๋‹ต์— ๋„๋‹ฌํ–ˆ๋‹ค.

ํด๋ฆฐํ•œ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ดค๋ผ๋ฝ ์“ฐ๋ ค๊ณ  ์• ์“ฐ์ง€ ๋ง์•„์•ผ๊ฒ ๋‹ค.  -->  ์˜คํžˆ๋ ค ์‹œ๊ฐ„์„ ๋” ์žก์•„๋จน์Œ .. ^__^

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€