자바/백준
[백준 2903] 중앙 이동 알고리즘 - 자바(Java)
Jakorithm
2023. 12. 8. 00:11
728x90
문제
https://www.acmicpc.net/problem/2903
2903번: 중앙 이동 알고리즘
상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다.
www.acmicpc.net
초기 상태 점의 개수는 4 (2^2)
점을 1번 찍은 경우 점의 개수는 9 (3^2)
점을 2번 찍은 경우 점의 개수는 25 (5^2)이다.
이를 통해 규칙을 유추하면 쉽게 문제를 풀 수 있다.
점을 찍지 않은 상태에는 2의 제곱, 1번 찍었을 때는 3의 제곱, 2번 찍었을 때는 5의 제곱으로 점을 3번 찍었을 경우 (5 + 4)의 제곱인 81이 된다. 4번 찍었을 때는 (9 + 8) 제곱, ...
제곱의 증가하는 대상이 이전과의 차이가 1, 2, 4, 8, ...로 2배씩 증가한다.
코드
위 규칙을 통해 다음과 같은 코드를 작성할 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[16];
int a = 2;
int b = 1;
for (int i = 1; i < arr.length; i++) {
a += b;
arr[i] = (int) Math.pow(a, 2);
b *= 2;
}
System.out.println(arr[n]);
}
}
거듭제곱을 활용하면 다음과 같이 코드를 작성할 수도 있다.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println((int) (Math.pow(Math.pow(2, n) + 1, 2)));
}
}
728x90