코딩 테스트

[코딩테스트] 백준 2292번: 벌집

dev.jelee 2025. 7. 10. 20:33

# 문제


# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ2292_v1 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    // 입력값
    int N = Integer.parseInt(br.readLine());

    // 마지막 방 번호
    int lastRoom = 1;
    int floor = 1; // 층수

    // while문 사용하여 N번방이 마지막 번호 초과면 멈추기
    // 1, 7, 19, 37 ...
    while (lastRoom < N) {
      lastRoom += 6 * (floor);
      floor++;
    }
    System.out.println(floor);
    br.close();
  }
}

# 입/출력 결과


# 과정

1. 입력은 BufferedReader 사용
2. int N에 방 번호 받기.
3. quarter, dime, nickel, penny 정수로 저장.
4. lastRoom과 floor 각각 1로 초기화 및 선언.
5. 벌집 이미지를 보면 마지막 번호의 방은 
    - 1층은 1, 2층은 7, 3층은 19, 4층은 37. 이렇게 증간된다.
    - 6의 배수로 증가하는 걸 알 수 있다. 6, 12, 18, ...
    - 이것을 토대로 각 층에 6을 곱한 값을 더해나가면 된다.
    - 각 층의 마지막 번호를 기준으로 N번 방이 몇 층에 있는지 구하면 된다.
    - while문 사용하여 계산하여 
    - 조건식을 lastRoom(마지막 방 번호)보다 N번 방이 크면 false가 되어 멈춘다.
    - 그리고 while문이 반복할 때마다 floor 층을 1씩 증가시켜준다.
6. 마지막에 floor를 출력하고, BufferedReader.close() 해주기.

# 메모

  • 6의 배수로 증가하고 마지막 방 번호 기준으로하여 N번 방의 위치를 찾기.
  • 공통점은 금방 찾았는데, 이걸 식으로 만들려고하니 시간이 좀 걸렸다. 수학적 사고능력이 낮은가... ㅠㅠ