알고리즘/백준

백준 11966 2의 제곱인가

고구마와 감자 2022. 12. 7. 22:05

https://www.acmicpc.net/problem/11966

 

11966번: 2의 제곱인가?

자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.println(twoN(N) ? 1 : 0);
    }
    public static boolean twoN(int n) {
        return (n & (n - 1)) == 0;
    }
    /*
      2의 n제곱수 판별
      2의 n제곱수를 2진수로 나타내면 1로 시작하고 오른쪽에 0으로 채워지는 형태
      여기서 1을 뺀 수를 2진수로 나타내면 0 제곱을 제외하고 2진수가 자리수가 하나 적고 1로만 이루어짐
      따라서 여기서 둘을 비트연산자 & 연산하면 2의 제곱수 인 경우 0이 나와야 한다.

}