문제
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
메모
- 규칙 없이 단순 반복문을 돌리면 시간 초과가 나는 문제이다. 규칙을 찾아보니 범위가 증가할 때마다 둘러싼 방이 각 6n(6, 12, 18, 24...)씩 증가하고 있다. 단순하게 생각하면 2~7번까지는 2번 만에 이동이 가능하고, 8~19까지는 3번 만에 이동이 가능하다. 범위는 1에서 증가하는 방 만큼 계속 누적시키며 1, 7(6), 19(12), 37(18) 범위에 따른 블록 합이 입력받은 N보다 작을 때까지 반복해주면 된다.
- while: 참일 때 실행되는 반복문이다. 조건은 문장안이 실행되기 전에 참, 거짓을 판단한다.
- 더하기 할당(+=): 오른쪽 피연산자의 값을 변수에 더한 결과를 다시 변수에 할당한다. 두 피연산자의 타입이 더하기 할당 연산자의 동작을 결정하며, 덧셈 또는 문자열 연결이 가능하다.
정답
let fs = require("fs");
let filePath = process.platform === "linux" ? "/dev/stdin" : "test.txt";
let input = fs.readFileSync(filePath).toString();
let range = 1;
let block = 1;
while (block < input) {
block += 6 * range;
range++;
}
console.log(range);