# 문제
# 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ2903_v2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // N번 반복
int x = 1; // 변 개수 초기화
for (int i = 0 ; i < N; i++) {
x *= 2;
}
int side = x + 1; // 한 변에 있는 점의 개수
int result = side * side; // 전체 점 개수
System.out.println(result);
br.close();
}
}
# 입출력 결과
# 과정
- 입력은 BufferedReader 사용
- int N에 몇 번 반복할지 입력값 받기
- int x = 1; 변의 개수 초기화
- for문 사용하여 N번 반복.
- for문 안에 반복할 때마다 x * 2의 값을 x에 저장.
- int side에 한 변에 있는 점의 개수를 구하여 저장. x + 1
- int result에 전체 점 개수를 구하여 저장. side * side
- result출력하고 BufferedReader .close() 하기
# 메모
- 처음에 내가 작성한 식은 약수를 구하여 최소와 마지막 값을 제외한 값을 구하여 x에 저장하여 계산하는 방법이었다.
- 입력값을 넣으면 출력은 원하는 값이 나오기에 코드를 제출하였는데 틀렸다. 곰곰히 생각하다 풀리지 않아서 chat-gpt한테 물어봤다.
- 나의 방식은 비효율적이고 불안정하다고 했다. 초기에 한 변에 점 2개가 있기 때문에 x = 1; 초기화해주고 변 1개는 2개의 점으로 이어져있고, 그 사이의 점 1개가 생기기 때문에 x + 1을 해준다.
- 즉 2^N 해주면 된다.
- 변 1개면 -> 2^1 + 1 = 2 + 1 = 3 -> 3*3 = 9
- 변 2개면 -> 2^2 + 1 = 4 + 1 = 5 -> 5*5 = 25
- 변 3개면 -> 2^3 + 1 = 8 + 1 = 9 -> 9*9 = 81
- 이런 식으로 된다.
- 어렵다... ㅠㅠ
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 1193번: 분수찾기 (0) | 2025.07.12 |
---|---|
[코딩테스트] 백준 2292번: 벌집 (0) | 2025.07.10 |
[코딩테스트] 백준 2720번: 세탁소 사장 동혁 (0) | 2025.06.30 |
[코딩테스트] 백준 2745번: 진법 변환 2 (0) | 2025.06.28 |
[코딩테스트] 백준 2745번: 진법 변환 (0) | 2025.06.27 |