Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 1. [์‹ค์Šต] Stack & Queue ๋ฌธ์ œ ๋ณธ๋ฌธ

CodeStates/Training

S4) Unit 1. [์‹ค์Šต] Stack & Queue ๋ฌธ์ œ

Jieunny 2023. 3. 14. 16:28

๐Ÿ“ฃ  ์œ ํšจํ•œ ๊ด„ํ˜ธ์Œ

Q. ์ž…๋ ฅ๋œ ๊ด„ํ˜ธ ๊ฐ’๋“ค์ด ๋ชจ๋‘ ์Œ์ด ๋งž๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ์ง€๋ฅผ ํŒ๋‹จํ•ด ๋ชจ๋‘ ์Œ์ด ๋งž์œผ๋ฉด true ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.

์ž…๋ ฅ๋œ ๊ด„ํ˜ธ ๊ฐ’๋“ค์ด ์œ ํšจํ•œ ๊ฒฝ์šฐ๋“ค์€ ๋‹ค์Œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

1. ์—ด๋ฆฐ ๊ด„ํ˜ธ๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ๋‹ซํžŒ ๊ด„ํ˜ธ๋กœ ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค.

2. ์—ด๋ฆฐ ๊ด„ํ˜ธ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋‹ซํ˜€์•ผ๋งŒ ํ•œ๋‹ค. 3. ๋ชจ๋“  ๋‹ซํžŒ ๊ด„ํ˜ธ๋Š” ๊ทธ์— ์ƒ์‘ํ•˜๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ž…๋ ฅ๊ฐ’์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ๊ด„ํ˜ธ๋Š” ()[]{}๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

const isValid = (str) => {
  const stk = [];
  if(str.length === 0 || str.length === 1) return false;
  // ๋นˆ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜ ๊ด„ํ˜ธ ํ•˜๋‚˜๋ฉด false

  for(let i=0; i<str.length; i++){
    // ๋Œ๋ฉด์„œ
    if(str[i] === '(' || str[i] === '{' || str[i] === '['){
      // ์—ฌ๋Š” ๊ด„ํ˜ธ ๋งŒ๋‚˜๋ฉด stk์— push
      stk.push(str[i]);
    }
    else if(str[i] === ')' || str[i] === '}' || str[i] === ']'){
      // ๋‹ซ๋Š” ๊ด„ํ˜ธ ๋งŒ๋‚˜๋ฉด 
      if(stk.length === 0) return false;
      // ๋‹ซ๋Š” ๊ด„ํ˜ธ ์žˆ๋Š”๋ฐ ์Šคํƒ์— ์—ฌ๋Š” ๊ด„ํ˜ธ ์—†์œผ๋ฉด false
      else {
        // ์Šคํƒ์— ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด
        let pop = stk.pop();
        // ์Šคํƒ์— ์žˆ๋Š”๊ฑฐ ๋นผ์„œ
        if((pop === '[' && str[i] !== ']') || (pop === '(' && str[i] !== ')') || (pop === '{' && str[i] !== '}')){
          // ๋“ค์–ด์˜จ ๋‹ซํžŒ ๊ด„ํ˜ธ๋ž‘ ๋งž๋Š” ๊ด„ํ˜ธ์ธ์ง€ ๋ณด๊ณ 
          return false;
          // ์•„๋‹ˆ๋ฉด false
        }
      }
    }
  }
 if(stk.length === 0) return true;
 // ์กฐ๊ฑด๋ฌธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ  ์ œ๋Œ€๋กœ pop ๋ฌ๋‹ค๋ฉด ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ๊ฒŒ ์—†์–ด์•ผ ํ•œ๋‹ค.
 else return false;
 // ๋‚จ์•„์žˆ๋Š”๊ฒŒ ์žˆ๋‹ค๋ฉด ์—ฌ๋Š” ๊ด„ํ˜ธ๋งŒ ๊ณ„์† ๋‚˜์˜จ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ false
}

๐Ÿ“ฃ  ๋ฐ•์Šค ํฌ์žฅ

Q. ๋งˆํŠธ์—์„œ ์žฅ์„ ๋ณด๊ณ  ๋ฐ•์Šค๋ฅผ ํฌ์žฅํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ•์Šค๋ฅผ ํฌ์žฅํ•˜๋Š” ๋ฐ๋Š” ํญ์ด ๋„ˆ๋ฌด ์ข์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ•œ ์ค„๋กœ ์„œ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ํ•œ ๋ช…์”ฉ ๋‚˜๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ ์ค‘ ๋‹คํ–‰์€, ์ธ์›์— ๋งž๊ฒŒ ํฌ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ตฌ๋“ค์ด ๋†“์—ฌ ์žˆ์–ด, ๋ชจ๋‘๊ฐ€ ํฌ์žฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง์ด ๋งŽ์€ ์‚ฌ๋žŒ์€ ์ง์ด ์ ์€ ์‚ฌ๋žŒ๋ณด๋‹ค ํฌ์žฅํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

๋’ท์‚ฌ๋žŒ์ด ํฌ์žฅ์„ ์ „๋ถ€ ๋๋ƒˆ์–ด๋„ ์•ž์‚ฌ๋žŒ์ด ๋๋‚ด์ง€ ๋ชปํ•˜๋ฉด ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ž์‚ฌ๋žŒ์ด ํฌ์žฅ์„ ๋๋‚ด๋ฉด, ํฌ์žฅ์„ ๋งˆ์นœ ๋’ท์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ํ•œ ๋ฒˆ์— ๋‚˜๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ์•ž์‚ฌ๋žŒ์˜ ๋ฐ•์Šค๋Š” 5 ๊ฐœ๊ณ , ๋’ท์‚ฌ๋žŒ 1์˜ ๋ฐ•์Šค๋Š” 4 ๊ฐœ, ๋’ท์‚ฌ๋žŒ 2์˜ ๋ฐ•์Šค๋Š” 8 ๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๋’ท์‚ฌ๋žŒ 1์ด ์ œ์ผ ๋จผ์ € ๋ฐ•์Šค ํฌ์žฅ์„ ๋๋‚ด๊ฒŒ ๋˜์–ด๋„ ์•ž์‚ฌ๋žŒ 1์˜ ํฌ์žฅ์ด ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๊ฐ™์ด ๋‚˜๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, ํ†ตํ‹€์–ด ์ตœ๋Œ€ ๋ช‡ ๋ช…์ด ํ•œ๊บผ๋ฒˆ์— ๋‚˜๊ฐ€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.

function paveBox(boxes) {
  // TODO: ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  let outPeople = [];
  // ๋‚˜๊ฐ„ ์‚ฌ๋žŒ ์ธ์› ์ˆ˜ ๋‹ด์„ ๋ฐฐ์—ด
  let queue = [];
  for(let i=0; i<boxes.length; i++){
    // ๋ฐ•์Šค ๋ฐฐ์—ด ๋Œ๋ฉด์„œ
    if(queue.length === 0){
      // ์ฒซ๋ฒˆ์งธ ์š”์†Œ์ด๋ฉด
      queue.push(boxes[i]);
      // ํ์— ํ‘ธ์‹œ
    }
    else {
      // 2๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ
      if(boxes[i] <= queue[0]){
        // ๋งŒ์•ฝ์— ์•ž์‚ฌ๋žŒ ๋ณด๋‹ค ๋ฐ•์Šค ๊ฐœ์ˆ˜๊ฐ€ ์ ์œผ๋ฉด 
        queue.push(boxes[i]);
        // ํ์— ๊ณ„์† ํ‘ธ์‹œ(๊ฐ™์ด ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ)
      }
      else if(boxes[i] > queue[0]){
        // ์•ž์‚ฌ๋žŒ ๋ณด๋‹ค ๋ฐ•์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด
        let people = 0;
        // ์ผ๋‹จ ๊ทธ ์•ž์— ์‚ฌ๋žŒ๋“ค ๋จผ์ € ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
        let len = queue.length;
        // ํ์˜ ๊ธธ์ด ๊ตฌํ•˜๊ณ 
        for(let i=0; i<len; i++){
          queue.shift();
          // ํ ์š”์†Œ ๋นผ๋ฉด์„œ
          people++;
          // ๋‚˜๊ฐ€๋Š” ์‚ฌ๋žŒ ์ˆ˜๋„ ++ ํ•ด์ค€๋‹ค.
        }
        outPeople.push(people);
        // max ๊ฐ’ ๊ตฌํ•ด์•ผํ•˜๋ฏ€๋กœ ๋‚˜๊ฐ„ ์‚ฌ๋žŒ ๋ฐฐ์—ด์— ์ผ๋‹จ ๋‹ด์•„์ค€๋‹ค
        queue.push(boxes[i]);
        // ์•ž์‚ฌ๋žŒ๋ณด๋‹ค ๋ฐ•์Šค ๊ฐœ์ˆ˜ ๋งŽ๋˜ ๊ฑฐ ํ์— push
      }
    }
  }
  let people = 0;
  // ํ์— ๋‚จ์€ ์‚ฌ๋žŒ๋“ค ๋‹ด์„ ๋ณ€์ˆ˜
  for(let i=0; i<queue.length; i++){
    // ํ์— ๋‚จ์€ ์‚ฌ๋žŒ๋“ค์€ boxes ๋ฐฐ์—ด์ด ๋‹ค ๋Œ์•„์„œ ํ•œ๋ฒˆ์— ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค
    people++;
  }
  outPeople.push(people);
  return Math.max(...outPeople);
  // ๊ทธ ์ค‘์— ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜๊ฐ„ ์ธ์›์ˆ˜ ๊ตฌํ•˜๊ธฐ
}