Post

[BaekJoon] 2292번 - 벌집 [Java][C++]

[BaekJoon] 2292번 - 벌집 [Java][C++]

문제 링크


1. 문제 풀이


각 방마다 규칙적인 숫자가 부여되어 있는데 특정 방까지 최소 개수의 방을 지나서 갈 때, 몇 개의 방을 지나가면 도착할 수 있는지 구하는 문제다. $1$ 개의 방을 지나면 갈 수 있는 방은 1번 방 하나뿐이며, $2$ 개의 방을 지나면 갈 수 있는 방은 2 ~ 7번 방, $3$ 개의 방을 지나면 갈 수 있는 방은 8 ~ 19번 방, … 이렇게 구성된다.

잘 보면 규칙을 확인할 수 있는데 거리 1에서는 $1$ ~ $1$, 거리 2에서는 $2$ ~ $7$, 거리 3에서는 $8$ ~ $19$, 거리 4에서는 $20$ ~ $37$ 이런식으로 거리 $n$ 에서는 $6 \times (n - 1)$ 개의 방이 존재한다. 이는 등차 수열을 이루므로 등차 수열의 합 공식에 따라 거리 $n$ 에서는 최대 $3 \times n \times (n - 1) + 1$ 번 방까지 갈 수 있다.


2. 코드


1. 풀이 [Java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.*;

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 n = 1;

        while ((3 * n * (n - 1) + 1) < N) {
            n++;
        }

        System.out.println(n);
    }
}


2. 풀이 [C++]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    int x = 1;
    while ((3 * x * (x - 1) + 1) < n) {
        x++;
    }

    cout << x;
}

This post is licensed under CC BY 4.0 by the author.