위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
13
3
//벌집이 형성되는 규칙에 따라 벌집의 위치를 구하는 문제
const fs = require("fs")
const input = fs.readFileSync('/dev/stdin').toString().trim();
var sum=1;
var count=1;
while(input>sum){
sum += 6 * count;
count++;
}
console.log(count);
무슨 규칙이 있을까 생각해보았다.
방번호: 최소 개수의 방으로 나타내면
1: 1,
2~7: 2,
8~19: 3,
20~37: 4 개의 방을 지나간다.
육각형이다보니 수가 방의 번호가 6, 12, 18순으로 늘어나는 것을 확인할 수 있었다.
따라서 while문을 사용하여 sum에 6*count를 더해주어 sum을 6, 12, 18순으로 늘어나게 하였다.
input이 sum보다 클 때만 반복문을 실행하게 하여 입력한 방번호(input)가 범위에 속하면 반복문을 나와 count(최소 개수의 방)을 출력하게 하였다.