https://www.acmicpc.net/problem/3460
1. 주어진 정수를 이진수로 변환
2. 뒤에서부터 반복문 돌리기
(예) 문자열 123일 때, 인덱스를 0부터 시작하면 1 -> 2 -> 3 순서
3 -> 2 -> 1 순서로 문자를 확인할 수 있게 인덱스를 '문자열 길이 - 1'부터 시작
3. 주어진 문제에 맞게 인덱스값 수정
(예) 문자열 123일 때, 3의 인덱스는 2
but, 문제에서 원하는 값은 0
'문자열 길이 - 실제 인덱스 값 - 1'이 거꾸로 된 인덱스의 값
package basic;
import java.io.*;
public class Main {
public void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int tc = Integer.parseInt(br.readLine());
for (int i=0; i < tc; i++) {
int num = Integer.parseInt(br.readLine());
String binaryNum = Integer.toBinaryString(num);
for (int j=binaryNum.length()-1; j>=0; j--) {
if (binaryNum.charAt(j) == '1') {
bw.write(binaryNum.length()-j-1 + " ");
}
}
bw.newLine();
}
bw.flush();
br.close();
bw.close();
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
- Integer.toBinaryString(num) : 10진수를 이진수로 변환
- charAt(idx) : 문자열 내부에서 해당하는 인덱스의 문자값
- char와 String 비교 시, " " 대신 ' ' 사용
- bw.newLine() : BufferWriter 다음 줄 작성
오~~~ 믓지다~!