백준 1373 : 2진수 8진수

1929 단어 cpp구현cpp

★★☆☆☆

기본 알고리즘 자체는 진수법 계산을 활용하면 돼서 꽤 간단했다
마지막에 100%에서 틀려서 해결하느라 조금 시간이 걸렸다..

<나의 풀이>

앞선 진법 변환 문제에서 stack을 사용하는 것이 효율적으로 보여, stack으로 사용했다.
8진수는 2진수를 3자리씩 끊어서 그 값을 계속해서 더해주면 된다.
출력을 위해 새로운 stack을 하나 더 만들었다.
0을 넣었을 때 0이 나와야 해서, 입력을 받고나서 입력값이 0이면 바로 return 하도록 했다.

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main() {
	int n;
	stack<int> arr;

	string tem;
	cin >> tem;
	if (tem.length() == 1 && tem[0] == '0') {
		cout << 0 << "\n";
		return 0;
	}

	for (int i = 0; i < tem.length(); i++) {
		arr.push(tem[i]-'0');
	}

	//cout << "stack 사이즈 : " << arr.size() << "\n";
	int r = 1;
	stack<int> ret;
	int temval=0;
	while (!arr.empty()) {
		temval += arr.top()*r;
		arr.pop();
		//cout << "값 확인 : " << temval << ", r: " << r << "\n";
		r = r * 2;
		if (r>=8) {
			r = 1;
			ret.push(temval);
			temval = 0;
		}
		if (arr.empty() && temval != 0) {
			ret.push(temval);
		}
	}
	
	while (!ret.empty()) {
		cout << ret.top();
		ret.pop();
	}
	cout << "\n";

	return 0;
}

좋은 웹페이지 즐겨찾기