인프런 - 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 |