[백준 | Javascript] 2292

박기영·2022년 5월 25일
0

백준

목록 보기
55/127
post-custom-banner

기본 수학1 2단계
2292번. 벌집

문제

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

입력

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

출력

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

예제 입출력

예제 입력

13

예제 출력

3

solution

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);

해설

이번에는 풀이를 한 번 그려보고 코드를 작성해보려고 했다.
이전 문제보다는 훨씬 더 원활하게 접근할 수 있었다.
코드로 구현하는 것에 어려움을 겪어, 참고 사이트를 참고했다.
주석과 문제 사진을 비교하면서 흐름을 따라가보자.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글