TIL/알고리즘 공부

백준 2292번 Swift 알고리즘 연습

여의도사노비 2022. 8. 22. 21:17
728x90

벌집 형태로 증가하는 형태 내에 중간 지점으로부터 최단 거리를 구하는 문제이다.

문제의 형태와 규칙에 대해서는 금방 찾았는데 이를 코딩으로 구현하는 것에 시간이 꽤나 많이 소모되었다.

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 1을 입력 받을 경우 무조건 print(1)
  2. 2 ~ 7(2) / 8 ~ 19(3) / 20 ~ 37(4) ... 이렇게 최단 거리가 1 늘어나는 구간이 생길 때마다 숫자의 개수가 6개씩 늘어난다.
  3. 따라서 19의 경우 count가 2번 더 오른 경우 sum의 값도 딱 19이기 때문에
  4. 마지막에 count 1을 더 해주지 않고 바로 print와 break가 실행된다.

너무나 당연한 수학적 형태를 코딩으로 표현하는게 정말 낯설다 ㅠㅠ 익숙해져야 할 문제인듯.

 

 

* 2292번

let n = Int(readLine()!)!
var sum = 1
var count = 1
for i in 1...n {
    if n == 1 {
        print("\(count)")
        break
    }
    if n <= sum {
        print("\(count)")
        break
    }
    sum += 6 * i
    count += 1
}

 

정리(Today I Learned)

  1. 없음