기타등등/알고리즘 기록

[C++] Stack 자료구조 - K진수 출력

CodeJB 2021. 7. 31. 18:32
무조건 배열에 저장할 생각을 버리자, 뽑아오는 방식에 따라 자료구조를 활용하자

#include <iostream>

using namespace std;

int stack[100], top = -1;

void push(int x){
    stack[++top] = x;
}

int pop(){
    return stack[top--];
}

int main() {
    int n, k;
    scanf("%d %d",&n,&k);
    char str[20] = "0123456789ABCDEF"; //이게 매우 유용함
    
    while(n>0){
        push(n%k);
        n=n/k;
    }
    
    while (top != -1) {
        printf("%c", str[pop()]);
    }
    return 0;
}
  • STL을 사용하지 않고 직접 Stack을 구현함.
  • 11에 대한 2진수를 출력한다면 나머지값과 몫을 이용하여 구할 수 있는데 값을 그대로 저장하면 1 1 0 1로 저장한다
  • 따라서 뽑아올때 역순으로 뽑아와야하는데, 할 수야 있지만 매우 비효율적이다 따라서 Stack을 이용하여 역순으로 출력한다.
  • 그리고 저장된 값을 전부 뽑아올 때 top != -1로 하였지만 STL을 사용하면 !stack.empty() 때까지만 반복하게하면 된다.
  • 진수 문제는 char str[20] = "0123456789ABCDEF"; 이게 매우 유용하다. 잊지말자
https://www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/dashboard