반응형
입력
중앙의 방 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)
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[백준] 기본 수학 - 2839번 설탕 배달 (0) | 2021.03.30 |
---|---|
[백준] 기본 수학 - 2775번 부녀회장이 될테야 (0) | 2021.03.30 |
[백준] 기본 수학 - 2869번 달팽이는 올라가고 싶다 (0) | 2021.03.30 |
[백준] 기본 수학 - 1712번 손익분기점 (0) | 2021.03.30 |
알고리즘 공부를 하며 (0) | 2020.10.27 |