처음 작성한 코드는 다음과 같다.
#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 |