1. 1 << 0 ~ j 까지 해보면 된다.
2. 비트연산자를 사용한다.
3. 비트 시프트 연산을 제외한 비트 연산자는 관계 연산자 (< = >) 보다 우선순위가 낮다.
4. << >> 가 <= >= < > 보다 높고 <= >= < > 보다 & ^ | 가 낮다.
5. 헷갈리지 않게 괄호를 필수로 계속 사용하면 될거같다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
import java.io.*; | |
/** | |
* https://www.acmicpc.net/problem/3460 | |
* BOJ 백준온라인져지 3460 이진수 풀이 | |
*/ | |
public class Main { | |
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
public static void main (String args[]) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
int N = Integer.parseInt(br.readLine()); | |
for (int i = 0; i < N; i++) { | |
int n = Integer.parseInt(br.readLine()); | |
for (int j = 0; n >= 1 << j; j++) { | |
if ((n & (1 << j)) >= 1) bw.write(j + " "); | |
} | |
bw.write("\n"); | |
} | |
bw.flush(); | |
} | |
} |
문제
양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106)
출력
각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 4880 다음수 풀이 (0) | 2018.04.09 |
---|---|
BOJ 백준온라인져지 5354 j박스 풀이 (0) | 2018.04.09 |
BOJ 백준온라인져지 2845 파티가 끝나고 난 뒤 풀이 (0) | 2018.04.06 |
BOJ 백준온라인져지 6603 로또 풀이 (0) | 2018.04.06 |
BOJ 백준온라인져지 2641 다각형그리기 풀이 (0) | 2018.04.05 |