https://www.acmicpc.net/problem/11966
[문제]
자연수 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");
}
}
}
'🎯 알고리즘 > 문제풀이' 카테고리의 다른 글
[Java/자바] 백준 7568번 - 덩치 (완전탐색) (0) | 2022.07.26 |
---|
댓글