본문 바로가기

ALGORITHM/인프런코테

53. k진수 출력

10진수 n이 입력되면 k진수로 변환하여 출력하는 프로그램을 만들어보는 문제이다. (스택 자료구조사용)

입력 10진수 n이 주어지고 k가 주어진다.

입력예제 11 2

출력예제 1011

2진수 변환 방법은 주어진 수 n을 2로 나눈 나머지를 스택에 push하고 n을 몫에 넣어준후에 몫이 0이 될때까지 반복한다.

스택으로 구현하여 pop하면 first in last out 구조로 나중에 넣은 값이 먼저 출력되기 때문에 2진수 변환을 구할 수 있다.

스택의 top은 -1로 초기화하고 push하기전에 +1 pop하고 난 후에  -1한다.

스택에는 언더플로우와 오버플로우가 있는데 언더플로우 예방방법으로 top이 0이상일 때까지 pop이 가능하게 만들면 되고, 오버플로우 예방은 stack의 크기가 100이라면 0 ~ 99 까지의 인덱스에 스택의 요소들이 있을 수 있는데 100번째 인덱스(스택의 크기와 같거나 클 때 push불가능하게 만들어주면 된다.)

#include<stdio.h>

int n, k, i, j, num, quotient, remainder;
int top = -1;
int capacity = 0;
int stack[100];
int array[100];

	void push(int n)
	{
		stack[++top] = n;
		capacity++;
	}
	
	int pop()
	{
		return stack[top--];
		
	}
	
	void binaryRevision(int n)
	{
		while(n >= 1)
		{	
			quotient = n / 2;
			remainder = n % 2;
			
			n = quotient;
			push(remainder);
			
		}				
	}
	
	void Revision16(int n, int k)
	{
		while(n >= 1)
		{	
			quotient = n / 16;
			remainder = n % 16;
			
			n = quotient;
			
			push(remainder);
			
		}				
	}
	
int main()
{
	char str[20] = {"0123456789ABCDEF"};
	
	scanf("%d %d", &n, &k );
	
	
	Revision16(n, 16);
	
	for(i = 0; i < capacity; i++)
	{
		printf("%c", str[pop()]);
	}
	
	
	 
	
	return 0;
}

'ALGORITHM > 인프런코테' 카테고리의 다른 글

3-1 두 배열 합치기(자바)  (1) 2023.10.06
38 inversion sequence  (0) 2023.07.19