백준 11576 : Base Conversion

혀니앤·2021년 4월 14일
0

C++ 알고리즘

목록 보기
48/118

★★☆☆☆

a->b진법으로 옮기는 문제
직접 옮긴다고 생각하지 않고, a->10->b 순서로 옮긴다는 생각이 들면 푸는 데에 오래걸리지 않는다.

<나의 풀이>

#include <iostream>
#include <cmath>
#include <stack>
using namespace std;

int main() {
	int a, b;
	cin >> a;
	cin >> b;

	int m;
	cin >> m;

	long long tem=0;

	for (int i = m-1; i >=0; i--) {
		int x;
		cin >> x;
		tem += x * pow(a, i);
		//cout << "tem :: " << tem << "\n";
	}
	//cout << "변환 완료 : " << tem << "\n";
	if (tem == 0) {
		cout << 0 << "\n";
		return 0;
	}

	stack<int> arr;
	for (int i = 1;tem>=1; i++) {
		arr.push(tem%b);
		tem = tem / b;
	}

	while (!arr.empty()) {
		cout << arr.top()<<" ";
		arr.pop();
	}
	cout << "\n";
	return 0;
}

친절하게 a진법의 자릿수를 주기때문에 굳이 메모리를 더 차지하지 않고, 입력받으면서 바로 10진수로 변환해주었다.
변환한 값이 0이라면 바로 return을 하고, 아닌 경우 b진수로의 변환 과정을 거쳤다.
10->b진수 문제는 앞에서도 했기 때문에 빠르게 코드를 짤 수 있었다.

다른 사람의 풀이

https://ldgeao99.tistory.com/308
재귀함수를 사용하여, 숫자가 0이되면 return을 한다.
재귀함수의 특성으로 역으로 출력되는 효과가 나타났다.

profile
일단 시작하기

0개의 댓글