Jun 개발노트

Stack / 스택

2020-02-14

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;
     }