반응형
자료형 범위 신경 안 써서 틀려버린 문제.......ㅎㅎ 브론즈라 방심했다.
중심인 1을 기준으로 한 겹(?)씩 늘어나면서 육각형 모양이 점점 커지는데, 한 겹 늘어날 때마다 전체 육각형의 한 변의 길이는 1씩 늘어난다. 따라서 최초를 0겹이라 하면, n겹 차에는 n*6개(모든 변의 길이의 합만큼)가 새로 추가된다.
예를 들어서 설명하면 처음에 1만 있는 상황은 0겹차고, 이제 1겹 차에는 1*6 = 6개, [2, 3, 4, 5, 6, 7]가 추가된다. 2겹차에는 2*6 = 12개, [8, 9, 10, 11, ..., 19]이 추가된다. 이렇게 n겹 차에 추가되는 수 중 가장 작은 수를 lo라고 하고 가장 큰 수를 hi라고 두어서, 이번 겹 차에 N이 들어가는지 체크해주는 방식으로 구현했다. 방금 예로 든 2겹 차에서는 lo=8이고 hi=19이므로 만약 이 사이에 들어가는 수라면, 2겹 차에 등장하는 수라는 뜻이다.
자료형 범위는 N이 최대 1,000,000,000까지 들어올 수 있는데, 이때의 lo, hi는 Int범위를 넘어갈 수도 있다. (hi는 count에 6이나 곱해서 더해준 수이기 때문에.) 따라서 더 큰 Int64 자료형을 써주면 된다.
import Foundation
let N = Int64(readLine()!)!
var count: Int64 = 1
var lo: Int64 = 1
var hi: Int64 = 1
while true {
if lo <= N && N <= hi {
print(count)
break
}
lo = hi + 1
hi = lo + count * 6 - 1
count += 1
}
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 7662번 이중 우선순위 큐 - C++(cpp) 풀이 (0) | 2022.01.14 |
---|---|
백준 1966번 프린터 큐 - 스위프트(Swift) 풀이 (0) | 2022.01.13 |
백준 1436번 영화감독 숌 - 스위프트(Swift) 풀이 (0) | 2022.01.13 |
백준 3770번 대한민국 - C++(cpp) 풀이 + 그림 설명 (0) | 2022.01.12 |
백준 1572번 중앙값 - 스위프트(Swift) 시간초과 해결 (0) | 2022.01.12 |
댓글