문제
https://www.acmicpc.net/problem/1212
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
해결한 방법
나누기
1. 8진수중 가장 큰 자리수는 4보다 작은 수일때 0으로 채울 필요가 없어서 가장 큰 자리수와 나머지 자리수를 따로 출력해주었습니다.
2. 8진수의 각 자리수를 int형으로 바꿔서 2로 나눈 나머지를 앞에 입력하고 2로 나누고 다시 2로 나눈 나머지를 앞에 입력하는 것을 자리수가 0이 될 때까지 반복합니다.
3. 가장 큰 자리수를 제외한 나머지 자리수들에 대해서 출력이 3자리수가 아니라면 앞에 0을 붙여줍니다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string input;
cin >> input;
if(input == "0"){
cout << 0;
return 0;
}
char temp;
string result;
temp = input[0] - '0';
result = "";
char ch;
while (temp) {
ch = temp % 2 + '0';
result = ch + result;
temp /= 2;
}
cout << result;
for (int i = 1; i < input.size(); i++) {
temp = input[i] - '0';
result = "";
char ch;
while (temp) {
ch = temp % 2 + '0';
result = ch + result;
temp /= 2;
}
while (result.size() < 3)
result = '0' + result;
cout << result;
}
return 0;
}
비트 연산
1. 8진수중 가장 큰 자리수는 4보다 작은 수일때 0으로 채울 필요가 없어서 가장 큰 자리수와 나머지 자리수를 따로 출력해주었습니다.
2. 4와 and 연산을하고 오른쪽 쉬프트연산(>>)을 두번 해주면 2진수에서 4에 해당하는 자리수만 가져올수 있습니다. 이와 같은 방법으로 2와 and, 1과 and 연산을 해서 각 자리수를 찾아내어 출력해줍니다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string input;
cin >> input;
if (input[0] >= '4') {
cout << ((input[0] & 4) >> 2);
cout << ((input[0] & 2) >> 1);
cout << (input[0] & 1);
}
else if (input[0] >= '2') {
cout << ((input[0] & 2) >> 1);
cout << (input[0] & 1);
}
else {
cout << (input[0] & 1);
}
int len = input.size();
for (int i = 1; i < len; i++) {
cout << ((input[i] & 4) >> 2);
cout << ((input[i] & 2) >> 1);
cout << (input[i] & 1);
}
return 0;
}
원래 두번째 방법은 개선한 방법으로 올리려고 했는데 시간이 더 걸려서 개선했다고 하기 힘들어서 두번째 방법으로 올립니다.
두번째 방법은 https://www.acmicpc.net/source/31302412 에서 참고한 코드입니다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
17103번 골드바흐 파티션 with C++ (0) | 2022.07.19 |
---|---|
2089번 -2진수 with C++ (0) | 2022.07.18 |
1373번 2진수 8진수 with C++ (0) | 2022.07.12 |
17087번 숨바꼭질 6 with C++ (0) | 2022.07.12 |
9613번 GCD 합 with C++ (0) | 2022.07.12 |