白準1212:8進数バイナリ


★★☆☆☆
久しぶりに問題を解いたせいか...たるんで何度も挑戦した
アルゴリズム自体は難しくない.
https://www.acmicpc.net/problem/1212

『私の答え』



stringとして入力(333334サイズが必要なため)
一番後ろから、8->バイナリ変換プロセスを行います.
8->バイナリ変換の場合は、2に分け続け、前のビットから出力し、スタックに保存します.
bool変数を作成し、出力中に最初の1をtrueに設定します.
#include <iostream>
#include <stack>
#include <string>
using namespace std;


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

	for (int i = tem.length()-1; i>=0;i--) {
		//cout << "N :: " << tem[i] << " 케이스 시작\n";
		int x = tem[i];
		int count =0;
		while (count<3) {
			arr.push(x%2);
			//cout << "PUSH :: " << x % 2 << "\n";
			x = x / 2;
			count++;
		}
	}
	bool Isstart = false;
	while (!arr.empty()) {
		if (!Isstart && arr.top() == 0);
		else {
			cout << arr.top();
			Isstart = true;
		}
		arr.pop();
	}
	return 0;
}

『他人の解答』


解く過程では8つのケースしかなかったので、毎回効率の低下を感じていた.
(同じことを繰り返す…)
他人の解答を見ていると、この考えに基づいてコードを書くケースが見られました.
すなわち、0〜7の出力値をアレイに予め入力してそのまま出力する.
運行時間も3分の1ほど減った.
https://blockdmask.tistory.com/243