본문 바로가기

알고리즘 문제풀이/추천 문제

[ 백준 3460 ] 이진수 (C++)

반응형
 

3460번: 이진수

양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.

www.acmicpc.net

 

테스트 케이스 T크기의 배열을 만들어준 다음, T의 모든 원소를 이진수로 변환하고 1의 인덱스를 출력해주면 된다. 이진수 변환은 손으로 직접 해본 결과 몫이 0일때까지 계속 나눠주다가 몫이 0이 되면 끝에 1을 붙여주면 된다.

 

#include <iostream>
#include <vector>
using namespace std;

int main(){
    
    int T, num, idx;
    cin >> T;
    
    int* ary = new int[T]; // 크기가 T인 배열 동적 할당
    
    for(int i = 0; i < T; i++)
        cin >> ary[i];
    
    for(int i = 0; i < T; i++){
        num = ary[i];
        
        // 이진수 변환 - 몫이 0일때까지 계속 나눈다
        idx = 0;
        while(num / 2 != 0){
            if(num % 2 == 1)
                cout << idx << " ";
            idx++;
            num /= 2;
        }
        cout << idx;
        cout << endl;
    }
    
    delete[] ary; // 할당 해제
    
    return 0;
}

 

반응형