[백준] 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
    반응형

    댓글