백준

백준 3460 이진수, c++

2024. 2. 27. 13:47

 

 

 

처음 작성한 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main() {
    int T, n;
    cin >> T;
    
    for(int i=0; i<T; i++) {
        cin >> n;
        
        int arr[20] = {-1,}; //이진수 저장
        int n_len = 0; //이진수 배열 'arr' 길이 저장
        
        while(n>0){
            arr[i] = n % 2;
            n /= 2;
            n_len++;
        }
        
        for(int j=n_len-1; j>=0; j--) { //이 문제에선 최하위 비트의 위치가 0임을 고려
            if(arr[j]==1)
                cout << (n_len-1)-j << " ";
        }
        
        cout << "\n";
    }
    
    return 0;
}

하지만 틀렸다는 오류가 났다.

2진수를 구하는 while문에서, 나오는 값들이  2진수의 최상위 비트부터 구해진다고 생각했는데, 알고보니 while문에서 구해지는 값들은 최하위 비트부터 구해지는 것이었다.

이 부분을 거꾸로 생각해서 오류가 난 것 같았다.

 

 

 

수정한 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main() {
    int T, n;
    cin >> T;
    
    for(int i=0; i<T; i++) {
        cin >> n;
        
        int arr[20] = {-1,}; //이진수 저장
        //int n_len = 0; //이진수 배열 'arr' 길이 저장
        int pointer = 0; //이진수 배열 'arr' 의 현재 위치 pointer
        
        while(n>0){
            arr[pointer] = n % 2;
            n /= 2;
            //n_len++;
            pointer++;
        }
        
        for(int j=0; j<20; j++) { 
            if(arr[j]==1)
                cout << j << " ";
        }
        
        cout << "\n";
    }
    
    return 0;
}

 

 

 

 

 

'백준' 카테고리의 다른 글

백준 2693 N번째 큰 수, c++  (0) 2024.02.27
백준 2460 지능형 기차 2, c++  (1) 2024.02.27
백준 23971 ZOAC 4, c++  (1) 2024.02.26
백준 5073 삼각형과 세 변, c++  (0) 2024.02.26
백준 2178 미로 탐색, c++  (0) 2024.02.25