양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 10^6)
각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.
1
13
0 2 3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n_case = Integer.parseInt(br.readLine());
int num = 0;
int index = 0;
for(int i=0; i<n_case; i++) {
index = 0;
num = Integer.parseInt(br.readLine());
if(num==1) {
System.out.println("0");
} else {
while(true) {
if(num%2==1) {
System.out.print(index + " ");
}
num = num/2;
if(num==1) {
System.out.println(index+1);
break;
}
else {
index++;
}
}
}
}
}
}
오늘 푼 문제가 너무 쉬웠기 때문에 한 문제 더 풀었다.
쓸데없이 삽질을 한 부분이 있는데, 처음에 if(num==1)을 안 해줬을 때, 시간초과 오류가 났다. 그래서 당연히 코드 자체는 맞을거라 생각했는데, if(num==1)을 추가 해주니까 정답이었다. 그래도 빠르게 오류를 알아서 오래 걸리지는 않았고, 문제 풀이 방법을 생각하는 것도 오래 걸리지 않았다. (당연하긴 하다. 쉬운 문제니까) 백준 예제가 조금만 더 친절했으면 좋겠다.. 내가 틀린 걸 인지하기까지가 너무 힘들다ㅠ