func isHan(n: Int) -> Bool {
let array = String(n).map { Int(String($0))! }
if array.count == 1 { return true }
let diff = array[1] - array[0]
for i in 1..<(array.count - 1) {
if diff != array[i + 1] - array[i] {
return false
}
}
return true
}
let N = Int(readLine()!)!
var result = 0
(1...N).forEach { n in
if isHan(n: n) {
result += 1
}
}
print(result)
개인적으로 파이썬으로 문제를 풀던 버릇이 남아있어서 배열로 접근하는 것을 더 선호합니다. n번째 자릿수라는 측면에서 index를 사용하면 더 직관적이기도 하고요. 하지만 속도 면에서는 의문이 드는 것이 사실입니다.
하지만 10의 배수로 나누는 방법은 O(1)이고 배열의 index로 접근하는 것도 O(1)입니다. 정수를 배열로 바꾸는 연산은 1번만 하면 되므로 O(상수)에 해당하므로 무시되죠. 그렇게 생각했을 때 시간복잡도면에서는 큰 차이가 나지 않기 때문에 아무거나 사용해도 된다는게 제 결론입니다. (실제로 이 문제를 2가지 풀이로 넣어봤는데 속도, 메모리가 동일했습니다.)