[Java]백준 2292번: 벌집

hansung's·2024년 2월 24일
0

문제 url:
벌집

문제:

🤔 문제 알아보기

  • 시작과 끝을 포함하여 최소로 지나는 방의 개수를 구하라
  • 문제의 사진을 자세히 들여다 보면 1은 본인 위치에서 1, 2 ~ 7까지는 2 ....
    즉, 이것을 테이블로 만들어 보여준다면.
N의 값벌집횟수
111
2 ~ 762
8 ~ 19123
20 ~ 37184
38 ~ 61245

이런 형태일 수 있다. 즉 벌집의 개수는 6의 배수로 늘어나기 때문에
N값이 어느 범위에 속하는지를 구한 다음 해당 횟수를 찾으면 된다.

😎 준비하기

1.BufferedReader를 이용해 입력받기
2.n값 입력받기
3.방의 개수를 구할 count 변수 생성
4.범위를 구할 min, max 변수 생성
5.범위안에 있는 값을 찾아 count를 출력하기 위한 while문 생성
6.출력하기

🐱‍👤 실제 코드

import java.io.*;

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

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

        // 3. 만약 1일 경우에는 방이 한개이므로,
        int count = 1;

        int min = 2;
        int max = 7;

        // 반복해서 n값이 어디에 속하는지 알아보자.
        while(true) {
            // 4. 만약 n이 1번이라면 첫방 역시 포함하므로 1을 출력
            if (n == 1) {
                System.out.println(count);
                break;
            }

            count++;

            if (n >= min && n <=max) {
                System.out.println(count);
                break;

            } else {
                min = min + (6 * (count - 1));
                max = max + (6 * count);
            }

        }

    }
}

🤢 회고

역시 문제의 규칙을 찾지 못해 오늘도 답지를 뒤적뒤적거린.. 이런 문제를 여러번 반복해서 풀어보며 수학적 감각을 익힐 수 있도록 해야겠다.
또한, 코드를 푸는데에 급급하여 역시나 코드 자체가 정갈하지 못하다.

코드 리팩토링 진행

import java.io.*;

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

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

        int count = 1; // 겹치는 수 (최소 루트 1도 포함하기 때문)
        int min = 2; // max가 n보다 크거나 같기 위해

        // 4. 만약 n이 1번이라면 첫방 역시 포함하므로 1을 출력
        if (n == 1) {
            System.out.println(1);

        } else {
            // 반복해서 n값이 어디에 속하는지 알아보자.
            while(min <= n) {
                min = min + (6 * count);
                count++;
            }
            System.out.println(count);

        }

    }
}

코드는 수는 줄고 불필요한 문구도 지웠는데.. 이상하게 속도는 같고 메모리는 더 많아졌다. 왜일까?
profile
ABAPER를 꿈꾸는 개발자

0개의 댓글