728x90
10진수를 2진수로 변환하는 방법을 3가지로 정리해보았다.
- 2로 나누었을 때의 나머지를 이용해서 구하기.
- shift연산자 이용하기.
- STL [bitset] 사용하기.
방법1 > 2로 나누었을 때의 나머지를 이용해서 구하기.
▶ stack을 사용해서 n이 살아있을 때까지 2로 나누어서 나머지를 넣었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
stack<int> s;
while (n) {
if (n % 2 == 1) {
s.push(1);
}
else {
s.push(0);
}
n /= 2;
}
while (!s.empty()) {
cout << s.top();
s.pop();
}
}
|
cs |
방법2 > 비트연산자(shift연산자)이용하기.
▶ shift연산자는 말 그대로 이동시키는 연산자이다. 즉, 2진수로 표현된 비트를 해당하는 방향으로 이동시키는 연산자이다. 예를들어,
- 10 >> 2 라면 10진수 정수 10의 2진변환값을 오른쪽으로 2칸 이동한 것이고,
- 10 << 3이라면 10진수의 정수 10의 2진 변환값을 왼쪽으로 3칸 이동한 것이다.
아래에서는 i를 3부터 지정함으로써 비트 자릿수를 0부터 3까지 총 4개로 정했다. 따라서 변환하고자 하는 10진수의 비트자릿수를 파악한 뒤 i를 바꿔줘야 할 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 3; i >= 0; i--) {
int value = (n >> i) & 1;
cout << value;
}
}
|
cs |
방법3 > STL bitset 이용하기
▶ STL에서 제공되는 bitset은 주어진 10진수를 2진수로 쉽게 변환할 수 있게 도와준다.
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <iostream>
#include <bitset>
using namespace std;
int main() {
int n;
cin >> n;
bitset<8> value(n);
cout << value;
}
|
cs |
비트연산자 연습문제로 2018 kakao blind recruitment [1차]비밀지도 문제를 풀어보았다.
https://school.programmers.co.kr/learn/courses/30/lessons/17681
해당 문제에서는 2번 방법인 shift연산자를 이용해서 vector a1, a2의 모든 원소를 2진수로 변환하여 자릿수를 더하는 과정을 거친다.
두개가 모두 1이라면 1, 둘 중 하나만 1이라면 1, 두개가 모두 0이라면 0을 문자열 s1에 붙여주는 방식으로 문제를 풀었다!!
Code
#include <string>
#include <vector>
#include <bitset>
#include <iostream>
#include <cstring>
using namespace std;
vector<string> solution(int n, vector<int> a1, vector<int> a2) {
vector<string> answer;
vector<string> v;
for(int i=0;i<n;i++){
string s1 = "";
for(int j=n-1;j>=0;j--){
string value_1 = to_string((a1[i] >> j) & 1);
string value_2 = to_string((a2[i] >> j) & 1);
if((value_1 == "0" && value_2 == "1") || (value_1 == "1" && value_2 == "0")){
s1 += "1";
}else if(value_1 == "1" && value_2 == "1"){
s1 += "1";
}else{
s1 += "0";
}
}
v.push_back(s1);
}
for(int i=0;i<v.size();i++){
string tmp = "";
for(int j=0;j<v[i].length();j++){
if(v[i][j] == '1'){
tmp += "#";
}else{
tmp += " ";
}
}
answer.push_back(tmp);
}
return answer;
}
728x90
'Algorithm > 개념정리' 카테고리의 다른 글
해시(hash)정리 (0) | 2022.10.05 |
---|---|
[개념정리] 조합(Combination) 직접 구현해보기 (1) | 2022.09.06 |
댓글