이 영역을 누르면 첫 페이지로 이동
hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

페이지 맨 위로 올라가기

hoonDEV

BOJ 2292 - 벌집 문제풀이

  • 2020.04.08 21:40
  • 알고리즘/문제풀이

문제를 읽고 이해하기

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

입력

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

출력

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

재정의와 추상화

1번부터 시작하여 주어진 번호의 방으로 가는데, 최소 개수의 방을 지나서 가려면 1에서 시작하여 대각선으로 쭉 가는 방법 밖에 없다. 아래 그림이 그 예시가 된다.

위 그림과 같이 대각선으로 쭉 가는 거리를 알아내려면 중심인 1로부터 몇 칸 떨어져 있는지 알아내면 된다.

빨간색 영역에 있는 1이 있는 곳을 중심(=0)이라 한다. 그리고 그 주위를 둘러싸고 있는 방들을 1번째 영역이라고 한다. 또 그 1번째 영역을 둘러싸고 있는 방들을 2번째 영역이라고 한다.

이렇게 i번째 영역을 둘러싸고 있는 방들의 영역을 i+1번째 영역이라고 하고, i번째 영역에 있는 방들은 중심으로부터 i + 1만큼 떨어져 있는 것이 되므로 i + 1가 정답이 된다.

아래의 표를 보자.

중심(0) 1번째 영역 2번째 영역 3번째 영역 4번째 영역 5번째 영역
1 6 12 18 24 30
1 1 + 6 = 7 7 + 12 = 19 19 + 18 = 37 37 + 24 = 61 61 + 30 = 91

첫 번째 줄은 각 영역에 있는 원소의 개수이고, 두 번째 줄은 중심부터 i번째 영역까지의 원소의 개수 합이다.

위 표를 통해 13번째 방이 있는 영역을 찾으면 7보다 크고 19보다 작거나 같은 2번째 영역이므로, 13번째 방은 중심으로부터 1 + 2 = 3만큼 떨어져 있으므로 답이 3이 된다.

코드 작성

#include <iostream>
using namespace std;

int main() {
    int total = 1;
    int i;
    int n;
    cin >> n;
    for (i = 0; total <= 1000000000; i++) {
        total += i * 6;
        if (total >= n) break;
    }
    cout << i + 1;
    return 0;
}

'알고리즘 > 문제풀이' 카테고리의 다른 글

BOJ 12865 - 평범한 배낭(냅색 알고리즘) 문제풀이  (0) 2020.04.09
BOJ 10250 - ACM 호텔 문제풀이  (0) 2020.04.08
BOJ 3053 - 택시 기하학 문제풀이  (0) 2020.04.08
BOJ 2580 - 스도쿠 문제풀이  (0) 2020.04.08
BOJ 1654 - 랜선 자르기 문제풀이  (0) 2020.04.07

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • BOJ 12865 - 평범한 배낭(냅색 알고리즘) 문제풀이

    BOJ 12865 - 평범한 배낭(냅색 알고리즘) 문제풀이

    2020.04.09
  • BOJ 10250 - ACM 호텔 문제풀이

    BOJ 10250 - ACM 호텔 문제풀이

    2020.04.08
  • BOJ 3053 - 택시 기하학 문제풀이

    BOJ 3053 - 택시 기하학 문제풀이

    2020.04.08
  • BOJ 2580 - 스도쿠 문제풀이

    BOJ 2580 - 스도쿠 문제풀이

    2020.04.08
다른 글 더 둘러보기

정보

hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

  • hoonDEV의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그

카테고리

  • 분류 전체보기 (91)
    • 일상 (13)
      • 후기 (1)
      • 계획 (11)
    • 공지사항 (1)
    • 알고리즘 (54)
      • 문제풀이 (53)
      • 이론 (1)
    • 공부 (19)
      • React (0)
      • Angular (5)
      • Java (3)
      • C, C++ (3)
      • JavaScript (6)
      • WEB (2)
    • 디자인 (1)
      • UI, UX (1)
    • 개발 (0)
      • boom (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 이분탐색
  • 문제풀이
  • 알고리즘
  • dp
  • 백준
  • 그리디
  • javascript
  • es6

나의 외부 링크

정보

훈개발자의 hoonDEV

hoonDEV

훈개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 훈개발자. Designed by Fraccino.

티스토리툴바