백준 1373 : 2진수 8진수
★★☆☆☆
기본 알고리즘 자체는 진수법 계산을 활용하면 돼서 꽤 간단했다
마지막에 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;
}
Author And Source
이 문제에 관하여(백준 1373 : 2진수 8진수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeongopo/백준-1373-2진수-8진수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)