λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
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 κ΅¬ν˜„μ΄ 쉽지 μ•Šμ•˜λ‹€.

λ¨Έλ¦Ώμ†μ—μ„œ κ·Έλ €λ³΄λŠ” 것도 μ‹œκ°„μ΄ κ½€ κ±Έλ Έκ³  ...

μ €λ ‡κ²Œ λ™μž‘ 과정을 ν•˜λ‚˜ ν•˜λ‚˜ μ‚΄νŽ΄λ³΄λ©΄μ„œ μ›ν•˜λŠ” 닡에 λ„λ‹¬ν–ˆλ‹€.

ν΄λ¦°ν•œ μ½”λ“œλ₯Ό μ²˜μŒλΆ€ν„° 촀라락 μ“°λ €κ³  애쓰지 말아야겠닀.  -->  였히렀 μ‹œκ°„μ„ 더 μž‘μ•„λ¨ΉμŒ .. ^__^

λ°˜μ‘ν˜•

λŒ“κΈ€