1212번: 8진수 2진수

문제:

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

입력:

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

풀이:

문제 풀이 방법에 따른 사용 메모리 및 시간

코드(쿠케캬캬님의 방식):

#include <iostream>

using namespace std;

int main(){
	string s, binary[8]={"000","001","010","011","100","101","110","111"};
	//입력
	getline(cin, s);
	//각 자리의 숫자마다 알맞는 이진수 값 출력
	for(int i = 0; i < s.size(); i++){
		//제일 첫번째 숫자인 경우 앞에 0무시하고 출력하도록
		if(i == 0){
			if(s[i] == '0') cout << "0"; //0만 있는 경우이므로 0만 출력
			else if(s[i] == '1') cout << "1";
			else if(s[i] == '2') cout << "10";
			else if(s[i] == '3') cout << "11";
			else cout<<binary[s[i]-'0'];
		}
		else cout<<binary[s[i]-'0'];
	}
}

코드(내가 풀었던 방법):

#include <iostream>
#include <stack>

using namespace std;

int main(){
	int temp[3] = {0,0,0};
	string s;
	stack<int> answer;
	getline(cin, s);
	//0인 경우 예외 처리
	if(s[0] == '0'){
		cout<< 0;
		return 0;
	}
	for(int i = s.size()-1; i >= 0; i--){
		//2의 승수에 맞게 값 저장 
		if((s[i]-'0')/4){
			temp[0] = 1;
			if((s[i]-'0'-4)/2){
				temp[1] = 1;
				if((s[i]-'0'-4-2)/1) temp[2] = 1;
			}
			else if((s[i]-'0'-4)/1) temp[2] = 1;
		}
		else if((s[i]-'0')/2){
			temp[1] = 1;
			if((s[i]-'0'-2)/1) temp[2] = 1;
		}
		else if((s[i]-'0')/1) temp [2] = 1;
		//temp에 저장된 이진수 값 스택에 저장 
		for(int j = 2; j >= 0; j--){
			if(i==0 && temp[j]==0){
				if(temp[j-1]==1||temp[j-2]==1) answer.push(temp[j]);
				else continue;
			}
			else answer.push(temp[j]);
		}
		//변수 초기화 
		for(int k = 0; k < 3; k++) temp[k] = 0;
	}
  //정답 출력
	while(!answer.empty()){
		cout<<answer.top();
		answer.pop();
	}
}