Algorithm/Java

[알고리즘_Java] 백준 2292번 벌집

Cune 2022. 2. 2. 11:23


저는 각 층에 있는 방 수를 세어봤는데 (층 수-1)*6씩 늘어나는 것을 알아 냈고 위처럼 패턴을 이해했습니다.

N이 전 층까지의 방 수보다 크고 현재 층까지의 방 수까지보다 작거나 같을때 현 층을 알 수 있습니다.

 

1층은 예외로 먼저 처리했고 2층부터 시작해서 min과 max로 층을 확인했습니다.

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());

        int max = 1;    //1층 방 1개 기본으로 시작
        int min = 0;
        int floor = 2;  //2층부터 시작

        if(N != 1) {
            while (true){
                max += (floor - 1) * 6; // 2층일때 7 -> 3층일때 19
                min = max - (floor - 1) * 6; //2층일때 1 -> 3층일때 7

               if (N > min && N <= max) { //1보다 N이 크고 7보다는 작거나 같을때 2층
                    bw.write(floor + "");
                    bw.flush();
                    break;
                }else{
                   floor++;
               }
            }
        }else{
            bw.write("1");  // N=1일때는 당연히 방 1개
            bw.flush();
        }
    }
}

한달전쯤에 도전했을때는 문제부터 이해하는게 어려워서 블로그 서치를 통해서 어느정도 이해하고 그 방법대로 풀었음에도 틀렸었다... 분명 완벽하게 이해하지 못했고 어느부분에서 실수했던게 틀림없었다. 이번에는 문제의 패턴을 이해하고 내방법대로 푸니까 더 이해하기도 쉬웠다! 수학문제라고 겁내지말고 차근차근 도전해보도록하자~