티스토리 뷰

알고리즘

53. K진수

홍복치 2020. 12. 31. 22:42

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅

 

 

입력예제 1

11 2

 

출력예제 1

1011

 

풀이 

- 스택 자료구조를 이용

- 11의 2진수 값을 구한다

- k진수라면 k로 나눈 나머지 값을 스택에 저장한다(이때 입력 값 n이 0이 되지 않도록 while루프가 >0일때라는 조건 명시)

- k로 나눌때마다 n은 몫을 가진다.

- char 배열에 "0123456789ABCDEF"를 넣어 놓고 스택에서 꺼낸값을 인덱스로 써서 진수 변환을 한다

- 스택은 #include<stack> 을 통해 사용이 가능

- s.top(); 가장 top에 있는 값을 참조 하는것, top()으로 참조해서 출력 후에 pop을 해준다.

 

* 스택 (후입선출 구조)

top = -1(++하면서 push 한다)

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

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

 

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
//int stack[100], top=-1; //++해서 push

//53. K진수 출력
//스택 자료구조 직접 구현

//void push(int x){
//    stack[++top]=x;
//}
//int pop(){
//    return stack[top--];
//}

int main() {
    int n, k;
    char str[20]="0123456789ABCDEF"; //수 변환
    scanf("%d %d", &n, &k); //n이라는 수를 k진수화
    stack<int> s;
    while(n>0){
        s.push(n%k);
        n/=k;
    }
    
//    while(top!=-1){
//        printf("%c", str[pop()]);
//    }
    while(!s.empty()){
        printf("%c", str[s.top()]); //s.top는 참조만, s.pop은 직접 뺌
        s.pop();
    }
    printf("\n");
    return 0;
}
 

 

'알고리즘' 카테고리의 다른 글

55. 기차운행[stack 활용]  (0) 2021.01.05
54. 올바른 괄호[stack 활용]  (0) 2021.01.04
52. Ugly numbers  (0) 2020.12.30
50. 영지(DP)  (0) 2020.12.29
49. 블록의 최댓값  (0) 2020.12.28
최근에 올라온 글
Total
Today
Yesterday