Stack 의 κΈ°λŠ₯ κ΅¬ν˜„ν•˜κΈ°

πŸƒπŸ»β€β™‚οΈμ‚¬μ „ μ€€λΉ„

im-sprint-data-structure λ₯Ό fork 및 clone ν•΄ μ™”λ‹€.

이후 ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ—μ„œ npm install λͺ…λ Ήμ–΄λ₯Ό 톡해 μŠ€ν”„λ¦°νŠΈμ— ν•„μš”ν•œ 라이브러리λ₯Ό μ„€μΉ˜ν•˜κ²Œ ν•œλ‹€.

그러면 이제 npm run test:part1 λͺ…λ Ήμ–΄λ‘œ μ•„λž˜μ™€ 같이 μ—λŸ¬ 사항을 ν™•μΈν•˜λ©΄μ„œ μ§„ν–‰ν•˜κ²Œ λœλ‹€.

exampleofstack

뭐λ₯Ό μ§„ν–‰ν•˜λŠ”μ§€?

Stack
λ‹€μŒκ³Ό 같은 methodλ₯Ό κ΅¬ν˜„ν•˜μ„Έμš” :
push(element) - μš”μ†Œλ₯Ό μŠ€νƒμ˜ μ΅œμƒλ‹¨μ— μΆ”κ°€ν•©λ‹ˆλ‹€.
pop() - μŠ€νƒμ˜ μ΅œμƒλ‹¨μ—μ„œ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•©λ‹ˆλ‹€.
size() - μŠ€νƒμ˜ ν˜„μž¬ μš”μ†Œ 개수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

Stack 의 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ λ‚΄λΆ€ λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 과정이닀.

이제 μ‹œμž‘!

πŸ”₯stackoverflow 의 λ°”λ‘œ κ·Έ Stack!

part-1/src/stack.js νŒŒμΌμ„ ν™•μΈν•˜λ©΄ μ•„λž˜ μ½”λ“œμ™€ κ°™λ‹€.

class Stack {
  constructor() {
    this.storage = {}
    this.top = 0
  }

  size() {}

  push(element) {}

  pop() {}
}

module.exports = Stack

클래슀λ₯Ό μ„ μ–Έν•˜κ³  new ν‚€μ›Œλ“œλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄λ‚Έ λ’€, λ§Œλ“  μΈμŠ€ν„΄μŠ€.push() ν˜Ήμ€ μΈμŠ€ν„΄μŠ€.pop() 등을 톡해 λ„£κ³  λΉΌλŠ” κΈ°λŠ₯을 λ§Œλ“œλŠ” 것이닀.

그럼 이제 μ§„μ§œ μ‹œμž‘!

πŸ€”κ³Όμ • 1. stack 에 λŒ€ν•œ 이미지 λ‹€μ‹œ λ– μ˜¬λ¦¬κΈ°.

stack 은 ν›„μž…μ„ μΆœ, λ§ˆμ§€λ§‰μ— 넣은 것을 λ¨Όμ € λΊ€λ‹€. μ ‘μ‹œλ₯Ό μœ„λ‘œ μŒ“μ•„μ˜¬λ¦¬λŠ” λͺ¨μŠ΅μ„ λ– μ˜¬λ¦°λ‹€. λ°‘μž₯λΉΌλ©΄ 와λ₯΄λ₯΄λ§¨μ…˜λ˜μ„œ μ•ˆλœλ‹€! (ν•˜μ§€λ§Œ μ„œμ μ—μ„œ μ±…μ‚΄λ•Œ λ§¨μœ„μ— κΊΌ 손탄거 κ°™μ• μ„œ λ°‘μž₯λΉΌμ„œ κ΅¬λ§€ν•œλ‹€λŠ” κ±°..πŸ₯° λ‚˜λ§Œ κ·ΈλŸ°κ°€?γ… )

πŸ€”κ³Όμ • 2. constructor κ°€ ν•˜λŠ” 역할을 μΆ”μΈ‘ 해보기.

MDN 곡식 λ¬Έμ„œμ—λŠ” class 의 constructor λ₯Ό μ•„λž˜μ™€ 같이 μ •μ˜ν•˜κ³  μžˆλ‹€.

constructor λ©”μ„œλ“œλŠ” class λ‚΄μ—μ„œ 객체λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•œ νŠΉλ³„ν•œ λ©”μ„œλ“œμž…λ‹ˆλ‹€.
ν΄λž˜μŠ€λŠ” constructorλΌλŠ” 이름을 κ°€μ§„ νŠΉλ³„ν•œ λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜μ”©λ§Œ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‰½κ²Œ μƒκ°ν•˜λ©΄ μš°λ¦¬κ°€ μ–΄λ–€ ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ,

function adder(array) {
  let result = []
  let count = 0
  for (let i = 0; i < array.length; i++) {
    // μ΄ν•˜ μƒλž΅...
  }
}

ν•¨μˆ˜ 내에 result λ‚˜ count 같은 μ΄ˆκΈ°ν™” ν•˜λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄ μ£Όμ§€ μ•ŠλŠ”κ°€?

class 의 constructor κ°€ λ°”λ‘œ κ·ΈλŸ¬ν•œ 역할을 λ‹΄λ‹Ήν•œλ‹€κ³  μ΄ν•΄ν•˜λ©΄ λœλ‹€. λ˜ν•œ counstructor λŠ” class λ₯Ό 톡해 λ‚˜μ˜€λŠ” μΈμŠ€ν„΄μŠ€μ˜ 속성 (차둜 치면 차의 λΈŒλžœλ“œ, 색, μ œμ› λ“±λ“±..) 을 μ •μ˜ν•˜λŠ” 곳이닀 라고 μƒκ°ν–ˆλ‹€.

그리고 ν΄λž˜μŠ€μ—μ„œ 찍어 λ‚˜μ˜€λŠ” μΈμŠ€ν„΄μŠ€κ°€ this κ°€ λ˜μ–΄, stack 이 λ‹΄κΈΈ 객체인 storage κ°€ μ •μ˜ λ˜μ–΄ 있으며

storage κ°€ λΉ„μ–΄ μžˆλŠ” ν˜„ μƒνƒœμ˜ top 은 0 이닀. 즉 top 은 storage 객체 내에 λ“€μ–΄κ°ˆ μ†μ„±μ˜ 갯수 λ₯Ό μ˜λ―Έν•œλ‹€κ³  μ΄ν•΄ν–ˆλ‹€.

이제 μ•„λž˜λΆ€ν„° λ‚˜μ˜€λŠ” λ©”μ†Œλ“œ 듀은 μΈμŠ€ν„΄μŠ€κ°€ μ–΄λ–»κ²Œ λ™μž‘ ν•˜λŠ”μ§€μ— λŒ€ν•œ 역할을 κ·œμ •ν•œλ‹€! 라고 μ΄ν•΄ν•˜λ©΄μ„œ μ•„λž˜λ‘œ λ‚΄λ €κ°€ 보자.

πŸ€”κ³Όμ • 3. class λ‚΄ λ©”μ†Œλ“œ size() λŠ” λ¬΄μ—‡μΌκΉŒ?

μΈμŠ€ν„΄μŠ€.size()

μœ„μ˜ μ½”λ“œλ₯Ό 톡해 λ‚΄κ°€ storage 에 push λ‚˜ pop 을 톡해 넣은 μ†μ„±λ“€μ˜ 갯수λ₯Ό λ¦¬ν„΄ν•œλ‹€.

즉 λ­”κ°€ μ§‘μ–΄λ„£κ³  λΉΌκ³  ν•˜λ‹€κ°€ μ–΄λž? ν˜„μž¬ μ‚¬μ΄μ¦ˆκ°€ 뭐얏! ν•˜λ©΄μ„œ μ•Œμ•„λ³Ό λ•Œ μ“°λŠ” λ©”μ†Œλ“œμ΄λ‹€.

return this.top; 을 톡해 μ–΄λ– ν•œ 자료λ₯Ό λ„£κ³  λΊ„ λ•Œ, λ³€μˆ˜ top 이 ν•˜λ‚˜ μ»€μ§€κ±°λ‚˜ μž‘μ•„μ§€λŠ” 것을 컨트둀 ν•  수 있게 ν–ˆλ‹€.

constructor() { // constructor λŠ” μ–΄λ–»κ²Œ 이해해야 μ’‹μ„κΉŒ? class λ₯Ό 톡해 λ‚˜μ˜€λŠ” μΈμŠ€ν„΄μŠ€μ˜ 속성을 μ •μ˜ν•œλ‹€ μƒκ°ν•˜λ©΄ 될까?
    this.storage = {}; // {0: 'a', 1: 'b'}
    this.top = 0; // storage κ°€ 빈 μƒνƒœμΌ λ•Œ top (객체 λ‚΄ 속성 갯수?) 은 0 인 μƒνƒœλ₯Ό μ •μ˜ν–ˆλ‹€.
  }               // 이제 μ•„λž˜μ˜ ν•¨μˆ˜λ“€μ€ μΈμŠ€ν„΄μŠ€κ°€ λ™μž‘ν•˜λŠ” 역할을 κ·œμ •ν•œλ‹€!
  size() {
    return this.top; // push λ˜λŠ” pop 에 μ˜ν•΄ top 의 값이 λ°”λ€Œκ²Œ λœλ‹€.
  }

πŸ€”κ³Όμ • 4. class λ‚΄ λ©”μ†Œλ“œ push(element) λŠ” λ¬΄μ—‡μΌκΉŒ?

μΆ”μΈ‘μ»¨λŒ€ μ–΄λ–€ 속성 (자료) 을 storage λΌλŠ” 객체에 μ§‘μ–΄ λ„£λŠ” (push) κΈ°λŠ₯을 ν•˜λŠ” λ©”μ†Œλ“œ 일 것이닀.

μš°λ¦¬λŠ” 객체 μ•ˆμ— 값을 λ„£λŠ” 방법을 μ•Œκ³  있기 λ•Œλ¬Έμ—

this.storage[this.top] = element

storage 객체에 top 을 key 둜 ν•΄μ„œ (λ””ν΄νŠΈκ°€ 0으둜 λ˜μ–΄ μžˆλ‹€) push λ©”μ†Œλ“œμ˜ νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ˜€λŠ” element λ₯Ό value 둜 λ„£μ–΄μ£Όκ²Œ λ§Œλ“ λ‹€.

즉 μ²˜μŒμ— 사과λ₯Ό λ„£λŠ”λ‹€κ³  ν•˜λ©΄, μœ„μ˜ μ½”λ“œλ₯Ό 톡해 μ•„λž˜μ™€ 같이 storage 에 ν‚€κ°€ 0인 사과가 λ“€μ–΄κ°€ 있게 λœλ‹€.

{ 0: '🍎' }

이제 객체 storage μ•ˆμ— μ–΄λ–€ 속성이 ν•˜λ‚˜! λ“€μ–΄κ°”λ‹€. ν•˜λ‚˜! ν•˜λ‚˜! 그러면 μ•„κΉŒ μœ„μ—μ„œ κ·œμ •ν•œ top 은 객체 λ‚΄ μ†μ„±μ˜ 개수λ₯Ό μ˜λ―Έν•œλ‹€κ³  ν–ˆκ³ , size() λ©”μ†Œλ“œμ™€ μ—°λ™λœλ‹€κ³  ν•˜μ§€ μ•Šμ•˜λ˜κ°€? μ—°λ™ν•˜λ €λ©΄ μ–΄λ–»κ²Œ?

storage 에 ν•˜λ‚˜ λ“€μ–΄κ°”μœΌλ‹ˆ top 도 0 μ—μ„œ 1둜 λ°”λ€Œμ–΄μ•Όμ§€ μ•Šμ„κΉŒ?

this.top++ // ν•˜λ‚˜ λ“€μ–΄κ°€λ©΄ 객체 λ‚΄μ˜ 속성이 ν•˜λ‚˜ 증가 ν–ˆλ‹€κ³  μ•Œλ €μ€€λ‹€!

λ§ˆμ§€λ§‰μœΌλ‘œ 사과λ₯Ό λ„£μ—ˆμœΌλ‹ˆ 넣은 storage λ₯Ό λ³΄μ—¬μ€˜μ•Όκ² λ‹€.

return this.storage

push λ©”μ†Œλ“œ κ΅¬ν˜„μ€ μ•„λž˜ μ½”λ“œλ‘œ 마무리 ν–ˆλ‹€.

push(element) {
    // 객체 μ•ˆμ— key: this.top, value: element
    this.storage[this.top] = element; // 졜초 빈 객체에 { 0: '🍎' } λ₯Ό λ„£κ³ ,
    this.top++;       // 객체 λ‚΄μ˜ 속성이 ν•˜λ‚˜ 증가 ν–ˆλ‹€κ³  μ•Œλ €μ€€λ‹€!
    return this.storage; // 그리고 { 0: '🍎' } λ₯Ό λ¦¬ν„΄ν•΄μ„œ 보여쀀닀.
  }

πŸ€”κ³Όμ • 5. class λ‚΄ λ©”μ†Œλ“œ pop() 은 λ¬΄μ—‡μΌκΉŒ?

프리 μ½”μŠ€μ—μ„œ 배열을 κ³΅λΆ€ν•˜λ©΄μ„œ push(), pop(), uhshift() 등을 ν•™μŠ΅ν•΄ λ΄€μ—ˆλ‹€.

κ·Έλ•Œ pop() 은 λ°°μ—΄μ˜ 맨 λ’€μ˜ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³ ,

제거된 κ·Έ μš”μ†Œλ₯Ό λ¦¬ν„΄ν•œλ‹€κ³  κ³΅λΆ€ν–ˆλ‹€. (맀우 μ€‘μš”) 이제 μ‹œμž‘ν•˜μž.

πŸ€§κ³Όμ • 5-1. pop() 을 톡해 λ­”κ°€ λΉΌκ³  μ‹ΆκΈ°λŠ” ν•œλ° μ• μ΄ˆμ— λΊ„κ²Œ μ—†λ‹€λ©΄?

λΉΌκ³  μ‹Άμ§€λ§Œ λΊ„κ²Œ μ—†λ‹€ λΌλŠ” λ¬Έμž₯은 무엇을 λœ»ν• κΉŒ? κ·Έ 말은 λ°”λ‘œ 객체 내에 λ“€μ–΄ μžˆλŠ” μš”μ†Œ(데이터) κ°€ ν•˜λ‚˜λ„ μ—†λ‹€λΌλŠ” λœ»μ΄λ‹€.

즉, 객체 λ‚΄μ˜ μ†μ„±μ˜ 갯수λ₯Ό μ •μ˜ν•œ top 이 0 μ΄λΌλŠ” 뜻이 λœλ‹€.

if 문을 톡해 빈 storage λ₯Ό λ¦¬ν„΄ν•˜λ„λ‘ ν–ˆλ‹€.

pop() {
  if(this.top === 0) {
    return this.storage; // λ§Œμ•½ 객체 내에 아무것도 λ„£μ€κ²Œ μ—†λ‹€λ©΄, ν•΄λ‹Ήλœ 빈 객체λ₯Ό κ·ΈλŒ€λ‘œ λ¦¬ν„΄ν•œλ‹€.
  }
}

πŸ€§κ³Όμ • 5-2. λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό λΉΌλ‚΄κΈ° 전에 μƒμƒν•˜κΈ°.

이제 push(element) λ₯Ό 톡해 storage 에 λ‹€μŒκ³Ό 같은 속성듀이 λ“€μ–΄κ°€ μžˆλ‹€κ³  μƒκ°ν•˜μž.

// storage 에 λ“€μ–΄κ°€ μžˆλŠ” 데이터 μƒνƒœ.
{0: "🍎", 1: "πŸ‰", 2: "πŸ‡"}

사과가 μ € 처음 λ“€μ–΄κ°”κ³ , μˆ˜λ°•, 포도 순으둜 storage 에 λ“€μ–΄κ°€ 있고 객체내 갯수 top 이 3인 μƒνƒœ 이닀.

μ €κΈ°μ„œ key κ°€ 2 인 β€πŸ‡β€ λ₯Ό pop() 을 톡해 λΉΌκ³  싢은 κ±°λ‹€.

일단 storage κ°μ²΄μ—μ„œ β€πŸ‡β€ λ₯Ό κ°€μ Έμ˜€λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? κ°μ²΄μ—μ„œ 값을 κ°€μ Έμ˜€λŠ” 것!

this.storage[this.top - 1] // 갯수 top 이 3이고 κ±°κΈ°μ„œ -1 을 ν•˜λ©΄ 2!

즉, storage[2] κ°€ λ˜μ–΄μ„œ storage 의 key κ°€ 2 인 값을 가져와라 λΌλŠ” μ˜λ―Έμ΄λ‹€.

그럼 β€πŸ‡β€ λ₯Ό κ°€μ Έμ˜¬ 것이닀!

이제 이것을 써먹기 μœ„ν•΄ λ”°λ‘œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄ λ†“λŠ”λ‹€. κ³Όμ • 5-2. 의 μ΅œμ’… ν˜•νƒœ 이닀. (아직 끝이 μ•„λ‹ˆλ‹€)

// ν˜„ μƒνƒœμ—μ„œλŠ” storage 의 λ§ˆμ§€λ§‰ μš”μ†ŒμΈ 2: πŸ‡ λ₯Ό μ§€μΉ­ν•œλ‹€.
let lastValue = this.storage[this.top - 1]

πŸ€§κ³Όμ • 5-3. 본격 λ§ˆμ§€λ§‰ μš”μ†ŒμΈ β€πŸ‡β€ λ₯Ό μ§€μ›Œλ²„λ¦¬κΈ°.

객체의 μš”μ†Œλ₯Ό μ§€μš°λŠ” 것. delete!

delete this.storage[this.top-1]; // 이제 πŸ‡ λ₯Ό μ§€μ›Œλ²„λ Έλ‹€.

// μ§€μ›Œλ²„λ¦¬κ³  남은 storage 의 λ°μ΄ν„°μ˜ λͺ¨μŠ΅
{0: "🍎", 1: "πŸ‰"}

πŸ€§κ³Όμ • 5-4. storage λ‚΄μ˜ κ°―μˆ˜λŠ” 그럼 이제 λͺ‡κ°œ?

남겨진 λ°μ΄ν„°μ˜ κ°―μˆ˜λŠ” μœ„λ₯Ό 보면 β€πŸŽβ€ λž‘ β€πŸ‰β€ 밖에 μ—†λ‹€. 즉 2κ°œκ°€ λ˜μ—ˆλ‹€.

ν•˜μ§€λ§Œ ν˜„μž¬ 갯수λ₯Ό μ •μ˜ν•˜λŠ” top 은 μ—¬μ „νžˆ 3으둜 μ •μ˜λ˜μ–΄ μžˆλ‹€. 포도λ₯Ό λ½‘μ•„λƒˆκΈ° λ•Œλ¬Έμ— top 을 ν•˜λ‚˜ λΉΌμ•Ό λ˜μ§€ μ•Šκ² λŠ”κ°€?

// 이제 storage λ‚΄μ—λŠ” {0: "🍎", 1: "πŸ‰"} 밖에 μ—†κ³ ,
this.top-- //  λ”°λΌμ„œ top 도 2둜 바뀐닀.

πŸ€§κ³Όμ • 5-5. λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό λ½‘λŠ” 역할을 μˆ˜ν–‰ν–ˆλ‹€λ©΄ 이제 pop() 은 뭘 λ¦¬ν„΄ν•˜μ§€?

μœ„μ—μ„œλ„ μ–ΈκΈ‰ν–ˆλ“―μ΄ pop() 은 λ’€μ˜ μš”μ†Œλ₯Ό λΉΌκ³ , ν•΄λ‹Ή 제거된 μš”μ†Œλ₯Ό λ¦¬ν„΄ν•œλ‹€!

return lastValue

πŸ€—κ³Όμ • 6. μ΅œμ’… μ½”λ“œ

teststack

개발자 λ„κ΅¬μ—μ„œ ν…ŒμŠ€νŠΈ ν•΄λ³Έ 그림이닀. μΈμŠ€ν„΄μŠ€λ₯Ό μ–΄λ–»κ²Œ λ§Œλ“œλŠ”μ§€ new ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λ“±μ˜ λͺ¨μŠ΅μ„ μœ μ‹¬νžˆ 봐야 μ’‹λ‹€.

class Stack {
  // stack 은 ν›„μž…μ„ μΆœ, μ ‘μ‹œλ₯Ό μœ„λ‘œ μŒ“μ•„μ˜¬λ¦¬λŠ” λͺ¨μŠ΅ μ—°μƒν•˜κΈ°, λ°‘μž₯λΉΌλ©΄ 와λ₯΄λ₯΄κΉ¨μ Έμ„œ μ•ˆλ¨!
  constructor() {
    // constructor λŠ” μ–΄λ–»κ²Œ 이해해야 μ’‹μ„κΉŒ? class λ₯Ό 톡해 λ‚˜μ˜€λŠ” μΈμŠ€ν„΄μŠ€μ˜ 속성을 μ •μ˜ν•œλ‹€ μƒκ°ν•˜λ©΄ 될까?
    this.storage = {} // {0: 'a', 1: 'b'}
    this.top = 0 // storage κ°€ 빈 μƒνƒœμΌ λ•Œ top (객체 λ‚΄ 속성 갯수?) 은 0 인 μƒνƒœλ₯Ό μ •μ˜ν–ˆλ‹€.
  } // 이제 μ•„λž˜μ˜ ν•¨μˆ˜λ“€μ€ μΈμŠ€ν„΄μŠ€κ°€ λ™μž‘ν•˜λŠ” 역할을 κ·œμ •ν•œλ‹€!
  size() {
    return this.top // push λ˜λŠ” pop 에 μ˜ν•΄ top 의 값이 λ°”λ€Œκ²Œ λœλ‹€.
  }
  push(element) {
    // 객체 μ•ˆμ— key: this.top, value: element
    this.storage[this.top] = element // 졜초 빈 객체에 { 0: '🍎' } λ₯Ό λ„£κ³ ,
    this.top++ // 객체 λ‚΄μ˜ 속성이 ν•˜λ‚˜ 증가 ν–ˆλ‹€κ³  μ•Œλ €μ€€λ‹€!
    return this.storage // 그리고 { 0: '🍎' } λ₯Ό λ¦¬ν„΄ν•΄μ„œ 보여쀀닀.
  }
  pop() {
    if (this.top === 0) {
      return this.storage // λ§Œμ•½ 객체 내에 아무것도 λ„£μ€κ²Œ μ—†λ‹€λ©΄, ν•΄λ‹Ήλœ 빈 객체λ₯Ό κ·ΈλŒ€λ‘œ λ¦¬ν„΄ν•œλ‹€.
    } // 이제 이런 μƒνƒœλΌκ³  κ°€μ •ν•΄ 보자. {0: "🍎", 1: "πŸ‰", 2: "πŸ‡"} , top 이 3인 μƒνƒœ.
    let lastValue = this.storage[this.top - 1] // ν˜„ μƒνƒœμ—μ„œλŠ” 2: πŸ‡ λ₯Ό μ§€μΉ­ν•œλ‹€.
    delete this.storage[this.top - 1] // 이제 πŸ‡ λ₯Ό μ§€μ›Œλ²„λ Έλ‹€.
    this.top-- // 이제 storage λ‚΄μ—λŠ” {0: "🍎", 1: "πŸ‰"} 밖에 μ—†κ³  λ”°λΌμ„œ top 도 2둜 바뀐닀.
    return lastValue // pop() 은 λ’€μ˜ μš”μ†Œλ₯Ό λΉΌκ³  ν•΄λ‹Ή 제거된 μš”μ†Œλ₯Ό λ¦¬ν„΄ν•œλ‹€.
  }
}
module.exports = Stack

πŸ€—κ³Όμ • 7. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μ‹€ν–‰ν•œ λͺ¨μŠ΅

resultstack

λ‚΄κ°€ λΈ”λ‘œκ·Έλ₯Ό μ“°λ©΄μ„œ 잘 이해 λ˜μ—ˆλ˜ 것 κ°™λ‹€.


[DotoriMook]
Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook