白準1212:8進数バイナリ
2107 ワード
★★☆☆☆
久しぶりに問題を解いたせいか...たるんで何度も挑戦した
アルゴリズム自体は難しくない.
https://www.acmicpc.net/problem/1212
stringとして入力(333334サイズが必要なため)
一番後ろから、8->バイナリ変換プロセスを行います.
8->バイナリ変換の場合は、2に分け続け、前のビットから出力し、スタックに保存します.
bool変数を作成し、出力中に最初の1をtrueに設定します.
解く過程では8つのケースしかなかったので、毎回効率の低下を感じていた.
(同じことを繰り返す…)
他人の解答を見ていると、この考えに基づいてコードを書くケースが見られました.
すなわち、0〜7の出力値をアレイに予め入力してそのまま出力する.
運行時間も3分の1ほど減った.
https://blockdmask.tistory.com/243
久しぶりに問題を解いたせいか...たるんで何度も挑戦した
アルゴリズム自体は難しくない.
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
Reference
この問題について(白準1212:8進数バイナリ), 我々は、より多くの情報をここで見つけました https://velog.io/@jeongopo/백준-1212-8진수-2진수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol