https://www.acmicpc.net/problem/3460
나의 해결방법
1. 2진수값과 테스트케이스 개수를 입력받을 정수형변수 t와 n을 선언해준다.
2. 테스트케이스 개수가 몇개냐에 따라 n을 몇번 입력받느냐 달라질 수 있기 때문에 for문을 테스트케이스개수만큼 돌려서 배열에 저장해준다.
3. cnt는 while문을 도는 횟수?라고 생각하면 되고 2로 나누었을때 1이 되는 경우에 cnt를 공백을 두고 출력해준다.(while문은 n이 0이 아닐때만 돈다)
4. n을 2로 나눈 몫으로 다시 저장해준다. (n=n/2)-> n/=2;
5. cnt값을 늘려주고 마지막에 줄바꿈을 추가해준다.
#include<iostream>
using namespace std;
int main()
{
int t, n[10];
cin >> t;
for (int i = 0; i < t; i++) {
cin >> n[i];
}
for (int i = 0; i < t; i++) {
int cnt = 0;
while (n[i] != 0)
{
if (n[i] % 2 == 1) {
cout << cnt << " ";
}
n[i] = n[i] / 2;
cnt++;
}
cout << endl;
}
return 0;
}
피드백
- n을 굳이 배열로 선언하지 않고 두번째 for문안에 입력받을 수 있었다.
- vector, bitset 헤더파일을 이용하여 풀어보기 (다음에 꼭)