Stack / 스택

February 14, 2020

Stack / 스택

  1. 정의 : 스택의 LIFO(후입선출 / 늦게 들어온 사람이 빨리 나가기)따라 정렬된 컬렉션

  2. 사용처 : 프로그래밍 언어의 컴파일, 변수나 메소드 호출을 메모리 저장

  3. 기능

    • push(item) : 원소 추가
    • pop() : 원소 반환
    • peek() : 가장 위에 있는 원소 참조 확인
    • isEmpty() : 스택에 원소가 하나도 없으면 true, 아니면 false
    • clear() : 스택의 모든 원소를 제거
    • size() : 스택의 모든 원소 갯수
  4. 코드 구현

    class Stack {
        constructor() {
            this._arr = []
        }
        push(item) {
            this._arr.push()
        }
        pop() {
            this.pop()
        }
        peak() {
            return this._arr[this._arr.length - 1]
        }
        isEmpty() {
            return this._arr.length === 0
        }
        clear() {
            this._arr = []
        }
        size() {
            return this._arr.length
        }
        print() {
            console.log(this._arr.toString())
        }
    }
  5. 10 -> 2진수 변환

    function divideBy2(decNumber) {
        let remStack = new Stack()
        let rem = 0
        let binaryString = ''
    
        while (decNumber > 0) {
            // JS는 부동소수점이기 때문에 소수점을 반환하기떄문에 올림한다.
            rem = Math.floor(decNumber % 2)
            remStack.push(rem)
            decNumber = Math.floor(decNumber / 2)
        }
    
        while (!remStack.isEmpty()) {
            binaryString += remStack.pop().toString()
        }
    
        return binaryString
    }
  6. 2, 8, 16 진수에서 사용가능한 모듈 만들기

    function divideBy2(decNumber, base) {
        // base를 추가하여 몇 진법인지 받는다.
        let remStack = new Stack()
        let rem = 0
        let baseString = ''
        let digits = '0123456789ABCDEF'
    
        while (decNumber > 0) {
            rem = Math.floor(decNumber % base) // base 변경
            remStack.push(rem)
            decNumber = Math.floor(decNumber / base) // base 변경
        }
    
        while (!remStack.isEmpty()) {
            baseString += digits[remStack.pop()]
            // 16진수는 ABCDEF로 값을 표현하기 때문에 배열로 값을 뽑아낸다.
        }
    
        return baseString
    }

© 2023, Customized by Joon