문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 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번째 줄)
이 코드를 식으로 표현하는 데에서 막혀서 어려움을 겪었다...😂
'코딩테스트 문제풀이 > backjoon' 카테고리의 다른 글
[백준] Node.js / 2470 - 두 용액 (투 포인터) (0) | 2023.05.15 |
---|---|
[백준] Node.js / 3273 - 두 수의 합 (투 포인터) (1) | 2023.05.10 |
[백준] Node.js / 2738번 - 행렬 덧셈 (0) | 2023.01.18 |
[백준] Node.js / 10250번 - ACM 호텔 (0) | 2022.12.19 |
[백준] Node.js / 10757번 - 큰 수 A+B (0) | 2022.12.19 |