백준 2292번을 풀어보았다.
1번 방은 최소 1개의 방, 2~7번 방은 최소 2개의 방, 8~19번 방은 최소 3개의 방, 20~37번 방은 최소 4개의 방을 지난다.
1 = 1 (최소 1개 방)
7 = 1 + 6 * 1 (최소 2개 방)
19 = 1 + 6 * 1 + 6 * 2 (최소 3개 방)
37 = 1 + 6 * 1 + 6 * 2 + 6 * 3 (최소 4개 방)
...
과 같은 규칙이 있다.
위 규칙을 토대로 작성한 코드는 아래와 같다.
let input = require('fs').readFileSync('/dev/stdin').toString()
input = Number(input)
let count = 1, rooms = 1
while (true) {
if (input > rooms) {
rooms += 6 * count++
} else {
break
}
}
console.log(count)
처음에는 위와 같이 작성했는데,
다른 풀이들을 더 찾아보니 while (true) { if (input > rooms) 부분을 다음과 같이 수정하는 게 더 자연스러울 듯 하다.
let input = require('fs').readFileSync('/dev/stdin').toString()
input = Number(input)
let count = 1, rooms = 1
while (rooms < input) {
rooms += 6 * count++
}
console.log(count)