

풀이
- 이 문제는 횟수에 따른 사각형의 개수가 몇개인지 규칙을 찾는것이 먼저였다.
- 0회(초기)에는 1개, 1회->4개, 2회->16개 이렇게 4의 N승 꼴로 증가하는 것을 발견했다. 그래서 Math.pow() 메소드를 사용해 사각형의 개수를 구했다.
- 즉, 사각형은 2회면 4 * 4 상태를 띈다. 이 4라는 수를 구하기 위해 Math.sqrt() 메소드를 사용해 다시 쪼개줬다.
- 이렇게 구한 4에 +1을 해준 5 * 5가 점의 개수였다.
틀린풀이
- 처음에 (rec+1) * (rec+1)인 2차원 배열을 생성해서 전체 원소 개수를 출력하는 방법은 아래와 같이 메모리 초과가 되었었다.

import java.io.*;
import java.lang.*;
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());//과정을 거칠 횟수
//1회 -> 4개, 2회 -> 16개,
int rec = (int)Math.pow(4,N);//사각형의 개수
//1회이상 실시해 사각형이 1개 이상이라면,
if(rec > 1) {//2회->16개면 사각형은 4*4개
rec = (int) Math.sqrt(rec);
}
//점은 (4+1)*(4+1)의 점이 존재
int[][] arr = new int[rec+1][rec+1];
System.out.println(arr.length * arr[0].length);
br.close();
}
}
수정한 풀이
- 그래서 고민을 해보다가 굳이 배열을 생성할 필요가 없다는 걸 깨닫고, 조건문을 if-else 문으로 수정하고 각 조건에 따라 즉시 출력을 해주는 방법으로 해결했다.
import java.io.*;
import java.lang.*;
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());//과정을 거칠 횟수
//1회 -> 4개, 2회 -> 16개: 4의N승
int rec = (int) Math.pow(4,N);//사각형의 개수
//1회이상 실시(사각형이 1개 초과)
if(N >= 1) {
rec = (int) Math.sqrt(rec);///2회->16개면 사각형은 4*4개
//점의개수는 (4+1)*(4+1)개
System.out.println((rec+1)*(rec+1));
}
else{
System.out.println((rec)*(rec));
}
br.close();
}
}