본문 바로가기
Algorithm/개념정리

[개념 정리]10진수를 2진수로 변환하는 방법 정리

by 젊은오리 2022. 10. 27.
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

댓글