[진법] 11576. Base Conversion

알고리즘/백준 알고리즘

2020. 5. 5. 17:07

1. 문제 해결 전략

숫자가 크지않아서 stack을 이용한 전형적인 진법변환 문제풀이로 접근할 수 있다.

A진법 -> 10진법 -> B진법 형식으로 바꾸면 되는 간단한 문제다.

물론 훌륭한 풀이라고는 생각하지 않지만 정말 간단히 풀수있다.

 

간단히 설명하자면 A진법의 각자리를 계산에 합의 형태로 10진수 값을 만들어낸다.

그리고 B진법으로 만들기위해 나머지 연산을 행하여 stack에 넣어준후

차례대로 출력하면 답이되겠다!

 

#include <iostream>
#include <string>
#include <stack>
#include <math.h>
using namespace std;

int main()
{
	int a, b;
	cin >> a >> b;
	int m;
	cin >> m;
	stack<int> v;

	int count = 0;
	for (int i = 0; i < m; i++)
	{
		int k;
		cin >> k;
		v.push(k);
	}
	int sum = 0;
	while (v.size())
	{
		int k = v.top();
		v.pop();
		sum += (k*pow(a, count));
		count++;
	}

	while (sum != 0)
	{
		int t = sum % b;
		sum = sum / b;
		v.push(t);
	}

	while (!v.empty())
	{
		cout << v.top() << " ";
		v.pop();
	}
	cout << endl;
}

algorithm 라이브러리에 존재하는 sort함수를 사용하여 오름차순으로 정렬해준다.

그 외에 특별할 것 없는 문제이다.

 

2. 걸린 시간

10분

 

3. 느낀점

비슷한 백준 문제를 틀려봐서 쉽게 푼것같다..

 

4. 링크

https://www.acmicpc.net/problem/11576