<Baekjoon> #11005 수학, 구현_진법 변환2 c++

Google 아니고 Joogle·2022년 2월 10일
0

Baekjoon

목록 보기
28/47
post-thumbnail

#11005 진법 변환
가끔 코딩 테스트에서 이렇게 기본 구현하는 문제들이 나와서 조금씩 풀어봐야겠다.

진법 변환은 원래 10진법의 숫자를 진법 변환을 하려고하는 수로 나누기를 반복해서 하면 되는데 쉽게 예를 들면,

나중에 숫자를 출력할 때 위에서 부터 pop()하며 출력하기 위해stack을 사용했고, 만약 10진법 보다 큰 수가 출력될 때는 11='A', 12='B'...와 같이 출력되어야 하기 때문에 10보다 큰 경우에는 'A' + (저장된 숫자-10) 으로 출력되게 했다.

풀이1

#include <iostream>
#include <stack>

using namespace std;

int main() {
	int n, b;
	cin >> n >> b;
	stack<int> s;

	int q = n / b;
	int r = n % b;
	s.push(r);
	while (q >= b) {
		int tmp = q;
		q = tmp / b;
		r = tmp % b;
		s.push(r);
	}
	if (q!=0) s.push(q);

	while (!s.empty()) {
		int num = s.top();
		if (num >= 10) {
			char alpa = 'A' + (num - 10);
			cout << alpa;
		}
		else cout << num;
		s.pop();
	}
	return 0;
}

풀이2
stack을 사용하지 않고 일반 string을 사용해 출력할 때 거꾸로 출력하는 방법도 있다. 그리고 애초부터 저장을 할 때 10보다 크면 알파벳으로 저장하게 한다. 이 방법이 더 직관적이고 깔끔한 거 같다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
	int N, B;
	cin >> N >> B;

	string s;

	while(N != 0){
		int r = N % B;

		if (r < 10)
			s += (char)(r + '0');
		else
			s += (char)(r - 10 + 'A');
		N = N/B;
	}

	reverse(s.begin(), s.end());

	cout << s;
}
profile
Backend 개발자 지망생

0개의 댓글