TIL/알고리즘 공부
백준 2292번 Swift 알고리즘 연습
여의도사노비
2022. 8. 22. 21:17
728x90
벌집 형태로 증가하는 형태 내에 중간 지점으로부터 최단 거리를 구하는 문제이다.
문제의 형태와 규칙에 대해서는 금방 찾았는데 이를 코딩으로 구현하는 것에 시간이 꽤나 많이 소모되었다.
이 문제를 풀면서 생각한 논리적 흐름은
- 1을 입력 받을 경우 무조건 print(1)
- 2 ~ 7(2) / 8 ~ 19(3) / 20 ~ 37(4) ... 이렇게 최단 거리가 1 늘어나는 구간이 생길 때마다 숫자의 개수가 6개씩 늘어난다.
- 따라서 19의 경우 count가 2번 더 오른 경우 sum의 값도 딱 19이기 때문에
- 마지막에 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)
- 없음