코딩 테스트

[코딩테스트] 백준 2903번: 중앙 이동 알고리즘

dev.jelee 2025. 7. 1. 14:18

# 문제

 

# 코드

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();
  }
}

 

# 입출력 결과

 

# 과정

  1. 입력은 BufferedReader 사용
  2. int N에 몇 번 반복할지 입력값 받기
  3. int x = 1; 변의 개수 초기화
  4. for문 사용하여 N번 반복.
  5. for문 안에 반복할 때마다 x * 2의 값을 x에 저장.
  6. int side에 한 변에 있는 점의 개수를 구하여 저장. x + 1
  7. int result에 전체 점 개수를 구하여 저장. side * side
  8. 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
  • 이런 식으로 된다. 
  • 어렵다... ㅠㅠ