• Home
  • About
    • 끄적끄적 photo

      끄적끄적

      하루하루 성장하기

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[백준] 2292번: 벌집

22 Oct 2018

Reading time ~2 minutes

문제

3 2

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.


입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.


출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.


예제

입력 출력
1 1
13 3
58 5


풀이

중앙의 1에서부터 바깥으로 나가면서 둘러싼 방들의 개수는 6개, 12개, 18개… 와 같은 식으로 6개씩 증가한다.

이 조건에 따라 주어진 숫자 N이 1로부터 바깥쪽으로 몇 번째 줄에 있는지 구했다. (1부터 한 칸으로 세므로 마지막에 +1)


#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    if (n == 1) {
        cout << 1;
        return 0;
    }
    
    int a = 1;
    int i = 0;
    while (!(a < n && n <= a + i * 6)) {
        a = a + i * 6;
        i++;
    }

    cout << i + 1;
    return 0;
}



출처: https://www.acmicpc.net/problem/2292



algorithmbaekjoon Share Tweet +1