코딩테스트 문제풀이/backjoon

[백준] Node.js / 2292번 - 벌집

sangchu 2023. 1. 18. 10:55
 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

문제

 

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

입력

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

출력

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

예제 입력 1 

13

예제 출력 1 

3

 

나의 풀이

const input = parseInt(require("fs").readFileSync("/dev/stdin"));
let range = 1,
  block = 1;

while (block < input) {
  block += 6 * range;

  range++;
}

console.log(range);

정말 오래 걸렸던 문제이다.. 수학적으로 식을 표현하는 데에서 많이 딸린다는게 느껴졌다.

 

1 - 1개
2~7 - 6개
8~19 - 12개
20~37 - 18개
38~61 - 24개

단순하게 생각하면,
2~7까지는 2번 만에,
8~19까지는 3번 만에 이동 가능하다.

해당 범위의 마지막 번호를 기준으로, 입력값이 그 값보다 크면 범위를 +1 해주고,
작으면 그 범위내에 있으므로, 그걸 코드로 표현했다. (코드 6번째 줄)
 
이 코드를 식으로 표현하는 데에서 막혀서 어려움을 겪었다...😂