문제
코드
fun main() {
var n = readln().toInt()
var cnt = 1
while (n > 1) {
n -= 6 * cnt
cnt++
}
println(cnt)
}
풀이
규칙이 1, 6, 12, 18, 24, ... 이런 식이다.
즉, 한 개의 방을 지나는 방 수는 1개,
두 개의 방 수를 지나는 방 수는 6개,
세 개의 방 수를 지나는 방 수는 12개.. 이런 식
지나가야하는 방의 개수가 같은 칸은 총 6의 배수 개라는 점이다
그래서 입력받은 숫자 칸으로 가려면 지나가야하는 방의 개수를 구하려면 0보다 작아질 때 까지 6의 배수를 계속해서 빼면 된다
여기서 1은 예외적으로 먼저 빼준다
36의 숫자를 예로 들면
36 - 1 - 6 - 12 - 18 < 0
즉, 총 4개의 칸을 지남
fun main() {
var n = readln().toInt() - 1
var cnt = 1
while (n > 0) {
n -= 6 * cnt
cnt++
}
println(cnt)
}
그래서 이런 식으로 작성했는데, n에 직접적으로 1을 빼는 것보다 while문에 n>1 조건으로 변경해주면 더 간결해질 것 같아서 수정했다
수정된 코드는 풀이 단락 위의 코드를 참고
'Algorithm > 📖Baekjoon' 카테고리의 다른 글
#11723 집합 (0) | 2024.07.25 |
---|---|
#1157 단어 공부 (0) | 2024.07.23 |
#5073 삼각형과 세 변 (1) | 2024.07.22 |
#23971 ZOAC 4 (0) | 2024.07.22 |
#1655 가운데를 말해요 (0) | 2024.07.20 |
댓글