Jun 개발노트

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

Written by Junho You 배운것을 기록하자