백준-2292번(일반수학1-벌집)-증가규칙 찾기

하스코딩·2025년 3월 21일

풀이

  • 이 문제는 쉽다고 생각했으나 규칙을 찾는데에 시간이 조금 걸렸다.
  • 아래 사진처럼 각 층마다 방의 개수는 6씩 증가하는 규칙이 있다.
  • 이 규칙을 이용하면, 초록색으로 체크되어있는 각 층의 최소값을 구할 수 있다.
  • range변수는 초기값이 2로 2층의 최소값을 갖는다.
  • 1층~m층까지 증가할 때마다 방 수는 6씩 증가하므로
    (1층:1개, 2층:6개, 3층:12개, 4층:18개 ...)
  • 각 층의 최소값 range = 2층:2~, 3층:2+61=8~, 4층:8+62=20, 5층:20+6*3=38 이렇게 계산할 수 있다.
  • 입력한 N값 < 다음층 최소값 range 이면, 현재층에 N번방이 존재하는 것이므로 break 후 cnt를 출력해주면 된다.
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());
        int cnt = 1;//벌집 중앙 1포함 카운팅
        int range = 2;//m층의 최소값- 기본값은 2층의 최소값 2로

        //1층~m층까지 증가할 때마다 공간 방 수 6씩 증가
        //1층:1개, 2층:6개, 3층:12개, 4층:18개 ...
        //각 층의 최소값 range = 2층:2~, 3층:2+6*1=8~, 4층:8+6*2=20, 5층:20+6*3=38
        if(N==1){
            System.out.println(1);
        }
        else {
            while(true){
                //N이 다음 층의 최소값보다 작으면, cnt++하지 않고 탈출
                if(N < range){
                    break;
                }
                range = range + (6 * cnt);//다음 층 최소값 계산 8 20 38
                cnt++;                     //                2층 3  4
            }

            System.out.println(cnt);
        }
        br.close();
    }
}

0개의 댓글