문제
8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.
입력
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
출력
첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.
예제 입력 1
314
예제 출력 1
11001100
#include <iostream>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
stack<int> s;
string n;
cin >> n;
if(n == "0") cout << 0 <<'\n';
else {
int len = n.length();
for(int i=len-1; i>=0; i--) {
int num = n[i] - '0';
for(int j=0; j<3; j++) {
s.push(num % 2);
num /= 2;
}
}
while(!s.top()) {
s.pop();
}
while(!s.empty()) {
cout << s.top();
s.pop();
}
}
return 0;
}
이문제 상당히 애먹었다....
잘 구해지는데 첫번째에 0이 아닌 다른수가 오면 무조건 1로 시작해야한다던가....
아니면 출력도 잘됬는데 테스트 케이스에 반례가있다던가해서 상당히 오래걸렸다.
결국 다른 풀이를 참조해서 stack으로 해봤다.
물론 배열에 미리 각 8진수의 1bit에 대응되는 2진수의 수를 미리 넣어놓으면 시간과 메모리가 단축되겠지만,
그냥 그렇게 풀고싶지않아서... 이렇게 풀었다.
2진수 구하는 알고리즘은 간단하다.
하지만 맨앞에 0이올경우 그걸 지워줘야하는데 스택에 push해준 반대순서대로 pop이 되기때문에
일단 처음 1이 나올때까지 다 pop을 해주었다.
그리고 하나씩 top을 출력하면서 pop을 해주면된다.
'PS > 백준' 카테고리의 다른 글
백준 / 수학 / 17103번 / 골드바흐 파티션 / C++ (2) | 2021.08.10 |
---|---|
백준 / 수학 / 2089번 / -2진수 / C++ (0) | 2021.08.09 |
백준 / 수학 / 1373번 / 2진수 8진수 / C++ (0) | 2021.08.07 |
백준 / 수학 / 17087번 / 숨바꼭질 6 / C++ (0) | 2021.08.06 |