기본 수학1 2단계
2292번. 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
13
3
const fs = require('fs');
const input = Number(fs.readFileSync('/dev/stdin').toString());
// 1번 방으로부터 떨어진 거리
// 시작과 끝이 포함이므로 1부터 시작
let layer = 1;
// 한 칸 멀어질 때마다 생기는 방들의 끝 번호
let house = 1;
while(house < input){
// 1 -> 7 -> 19 -> 37 -> ...
house += 6 * layer;
// 1 -> 2 -> 3 -> 4 -> ...
layer++;
}
console.log(layer);
이번에는 풀이를 한 번 그려보고 코드를 작성해보려고 했다.
이전 문제보다는 훨씬 더 원활하게 접근할 수 있었다.
코드로 구현하는 것에 어려움을 겪어, 참고 사이트를 참고했다.
주석과 문제 사진을 비교하면서 흐름을 따라가보자.