본문 바로가기
🎯 알고리즘/문제풀이

[Java/자바] 백준 11966번 - 2의 제곱인가?

by 서버요정 호토론 2022. 7. 26.

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

 

11966번: 2의 제곱인가?

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

www.acmicpc.net

 

[문제]

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

[입력]

첫째 줄에 N(1 ≤ N ≤ 230)이 주어진다.

[출력]

N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

 

[예제]

더보기
 

예제 입력 1 

1

예제 출력 1 

1

예제 입력 2 

2

예제 출력 2 

1

예제 입력 3 

3

예제 출력 3 

0

예제 입력 4 

4

예제 출력 4 

1

 

[생각하기]

2의 거듭제곱을 구하는 문제로, 2의 배수를 구하는 것과 혼동하지 않도록 주의한다.

처음 문제를 접하면 어떻게 제곱을 구하나 막막하게 느껴진다.

2의 거듭제곱을 바꾸는 과정을 그대로 코드로 옮겨보자

 

2^0 = 1
2^1 = 1 x 2                    = (2^0) x 2
2^2 = (1 x 2) x 2            = (2^1) x 2
2^3 = (1 x 2 x 2) x 2       = (2^2) x 2
2^4 = (1 x 2 x 2 x 2) x 2 = (2^3) x 2

다음은 2의 제곱수를 구하는 과정이다

이전 제곱수에 2를 곱하면 현재 제곱수가 된다. 

 

power = power * 2;

이를 코드로 옮기면 이렇게 된다

어떤 숫자가 나올지 모르니까 while문으로 반복을 돌린다

 

2의 0제곱인 1도 포함되어야 하니 따로 조건을 추가한다

 

[소스코드]

 

import java.io.*;
import java.util.Scanner;

class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int pow = 2;

        if (N == 1) { //2의 0제곱일 경우
            System.out.print("1");
            System.exit(0);
        }


        while (pow < N) {
            pow *= 2;
        }

        if (pow == N) {
            System.out.print("1");
        } else {
            System.out.print("0");
        }

    }
}

 

댓글