본문 바로가기

개발/알고리즘

[백준] 기본수학 - 2292번 벌집

반응형
 

2292번: 벌집

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

www.acmicpc.net

 

입력

중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.
숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때
몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.

출력

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

 

풀이

벌집에서 규칙을 구한다
각 방은 1 -> 7 -> 19 -> 37 -> 61 ... 식으로 증가한다
이는 1 -> 6 -> 18 -> 36 -> 60 .. 순으로 증가하며
1 -> (6*1) -> (6*1) + (6*2) -> (6*1) + (6*2) + (6*3) -> (6*1) + (6*2) + (6*3) + (6*4) ... 임을 알 수 있다
수 n에 대해 6(n-1 + n-2 + ... n-n) 이 이루어진다

재귀 또는 반복문으로 n번 반복을 해 이전 수와 현재 값을 더하도록 만들자
+ 1일 경우 반복을 하지않고 1을 반환한다

 

Swift 전체 코드

let input = Int(readLine()!)!
var arrays : [Int] = [1]
var i = 1
    
while true {
    let newValue = 6 * i + arrays[i - 1]
    if input >= arrays[i - 1] && input <= newValue {
       break
    }
        
    arrays.append(newValue)
    i += 1
}
    
input == 1 ? print(1) : print(i + 1)
반응형