쌓고 쌓다
[백준] 진법 변환2 11005번 C++ 풀이 본문
전체 코드
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 777
typedef struct {
int* s;
int top;
} Stack;
void init(Stack* st)
{
st->top = -1;
st->s = (int*)malloc(sizeof(int) * MAX_SIZE);
}
bool is_empty(Stack* st)
{
if (st->top == -1)
return true;
return false;
}
void push_back(Stack* st, int num)
{
st->s[++(st->top)] = num;
}
int pop(Stack* st)
{
return st->s[(st->top)--];
}
void solve(int num, int conv, Stack* stack)
{
while (num > 0) {
if (num % conv < 10)
push_back(stack, num % conv);
else
push_back(stack, num % conv - 10 + 'A');
num /= conv;
}
while (!is_empty(stack))
{
int res = pop(stack);
if (res < 10)
printf("%d", res);
else
printf("%c", res);
}
printf("\n");
}
int main(void)
{
int num = 0;
Stack stack;
init(&stack);
scanf("%d", &num);
int conv;
scanf("%d", &conv);
solve(num, conv, &stack);
}
과제를 재활용해서 사용하는 거라... C언어로 스택을 구현하여 풀었습니다.
10진법을 N진법으로 바꿀때
1.현재 num을 N으로 나눈 나머지를 스택에 넣어줍니다.
2. 그리고 num을 N으로 나눕니다.
1,2를 num이 0이 될 때까지 합니다.
스택을 하나씩 뽑아내며 출력해주면 끝
if (num % conv < 10)
push_back(stack, num % conv);
else
push_back(stack, num % conv - 10 + 'A');
나눈 나머지가 10이 넘어간다면 A,B,... 이겠죠
만약 나눈 나머지가 10이라면 A가 스택에 들어가야 합니다.
그렇기에 현재 10에서 10을 빼주고 'A'를 더해준다면
10~15까지 순서대로 각각 A,B,..에 해당하는 수를 넣어집니다.
if (res < 10)
printf("%d", res);
else
printf("%c", res);
출력할 때 10보다 작다면 0~9일 테니 그냥 출력을 해주고
10보다 크다면 char형으로 변환하여 출력을 해주면 자연히 문자가 출력이 됩니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 주사위 1041번 C++ 풀이 (0) | 2022.05.07 |
---|---|
[백준] 보물 1026번 C++ 풀이 (0) | 2022.05.07 |
[백준] 트리 순회 1991번 C++ 풀이 (0) | 2022.05.04 |
[백준] 카드 놓기 5568번 C++ 풀이 (0) | 2022.05.02 |
[백준] A와 B 12904번 C++ 풀이 (0) | 2022.05.01 |
Comments