[백준] 2292번 - 벌집 (node.js)

728x90
반응형

 

 

 

 

링크

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

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

www.acmicpc.net

 

 

 

문제

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

 

 

 

입력

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

 

 

 

출력

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

 

 

 

예제

입력


  
13

 

출력


  
3

 

 

 

답안


  
const fs = require("fs");
const cnt = fs.readFileSync("input.txt").toString().trim();
const solution = () => {
const numCnt = parseInt(cnt);
let count = 1, limit = 1;
while (limit < numCnt) {
limit += 6 * count;
count++;
}
console.log(count);
};
solution();

 

만일


  
만일
while (limit <= numCnt) {
}
로 수정하게 된다면
while (limit <= N)을 사용하면 N이 limit에 도달했을 때
이미 원하는 범위에 도달했음에도 불구하고
불필요하게 추가 범위 증가가 일어나게 됩니다.
이는 문제의 요구사항을 정확히 충족시키지 못하고,
불필요한 계산을 하게 만들 수 있습니다.

 

즉 주어진 숫자가 7일때,

limit이 7이 나온다면 그때의 count를 가져오면 답변인데,

<=으로 인해서 한번 더 루프를 돌게 됨으로 count + 1이 답변으로 나올 수 있게 된다.

 

 

 

728x90
반응형

댓글