양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
4. 10진수를 이진수로 바꾼다.
로 하려고 했으나, 인덱스값을 구하는데서 삽질하던 와중 친구가 다른 방법을 알려줌 !)13 -> 1101
13%2 = 1
13/2 = 6
6%2 = 0
6/2 = 3
3%2 = 1
3/2 = 1
1%2 = 1
1/2 = 0
package lv_1;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class B3460 {
public static void main(String[] args) throws Exception {
//성능 향상을 위해 Scanner 대신 BufferedReader를 사용한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//t의 값을 구한다. readLine은 String값이기 때문에 int로 변환한다.
int T = Integer.parseInt(br.readLine());
for(int i=0;i<T;i++) { //T번 반복
int n = Integer.parseInt(br.readLine()); //정수 n을 입력받는다.
int index=0; //인덱스값을 구하기 위한 변수
while(n>0) { //나누는 수가 0 이상이면 실행
if(n%2==1) { //나머지가 1이면 이진수로 나타냈을 때 1이 됨
System.out.print(index + " "); //인덱스값 출력 (줄바꿈 하지 않기 위해 print 사용)
}
n/=2; //n은 n를 2로 나눈 몫
index++; //인덱스값 +1 하고
//반복
}
System.out.println(); //하나의 n이 끝나면 줄바꿈
}
}
}
맨 처음에는 Integer.toBinaryString(int i)
를 사용해서 10진수를 2진수로 바꾸려고 했다.
반환타입은 String
정수를 2로 나누었을 때 나머지가 1이면 이진수로 나타냈을 때 1이고, 0이면 이진수로 나타냈을 때 0인 점을 사용해서 변환값을 구할 수 있다.
몫이 0이 될 때까지 반복하면 된다.
문자열에서 한글자 값만 구하고 싶다면 charAt(index)
을 사용하면 된다.
반환타입은 char
값 비교를 하고 싶으면 아스키코드값으로 비교해야 한다.