Koala - 14기/코딩테스트 준비 스터디

[백준/C++] 11576번 Base Conversion

nunomi0 2024. 4. 6. 21:04

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

 

11576번: Base Conversion

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의

www.acmicpc.net

 

문제

입력에 a, b (2<=a, b<=30)를 입력받고 a진법으로 나타낸 수를 m자리수 만큼 입력받는다. 이 수를 b진법으로 변환하여 출력한다.

 

풀이

a->b진법으로 바로 가면 헷갈리므로 total 변수에 10진법으로 변환한 수를 저장한다. 이후 total에 가까운 b^x부터 나눠가며 그 몫을 출력한다. 마지막에 놓치는 값이 없는지 확인해주어야 한다.

#include <iostream>
#include <vector>
using namespace std;

long long a, b, m, arr[30], idx = 1, total = 0;
vector<int>v;

int main() {
	cin >> a >> b;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> arr[i];
	}
		
	for (int i = 0; i < m; i++) {
		total += arr[m-1-i] * idx;
		idx *= a;
	}

	long long tmp = 1;
	while (tmp <= total) tmp *= b;
	tmp /= b;

	while (tmp!=1) {
		v.push_back(total / tmp);
		total %= tmp;
		tmp /= b;
	}
	v.push_back(total / tmp);

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << ' ';
	}

}