프로그래머스 코딩테스트 [ 배열의 평균값 ]
Github 코드
- 정수 배열을 일일이 합해서 count만큼 나누는것 X
let sum = Array.reduce(0,+)
let average = Double(sum) / Double(Array.count)
- 위 코드처럼 하면 바로 할 수 있음.
- 단 시간 복잡도는 똑같이 O(N)이기에, 큰 배열을 반복적으로 접근할떄는 결국 알고리즘을 사용해야함.
프로그래머스 코딩테스트 [ 자릿수 더하기 ]
Github 코드
- 기존에는 정수를 % 10 를 하면서 마지막 자리수를 먼저 구하고 계속 하는 방식으로 진행했음.
- 이번에는 문자열로 변환 후, String에서 각 Char 추출후 Int로 변환
- Swift 에서는 문자를 정수로 변환 실패 할 수가 있음. (예: A -> Error)
- 따라서 if Let 구문을 통해서 언래핑을 해야한다. 즉 오류 방지를 위해 사용함.
프로그래머스 코딩테스트 [ 약수의 합 ]
Github 코드
- 매번 보는 문제이지만, Brute Force로는 시간복잡도 때문에 안될 가능성이 높음.
- 제곱근 (SquareRoot) 만큼까지만 계산하는 방식으로 시간복잡도 O(N) -> O(sqrt(N))으로 줄일수 있음.
- 단 문제는 0 으로 정수가 주어질 경우 예외처리 해야함
- 나는 if let으로 할 수 있을 줄 알았는데, If let 으로 할 경우는 Optional인 경우에만 가능하다.
let sqrtN = Int(Double(n).squareRoot())
var ans = 0
for i in 1...sqrtN {
if n % i == 0 {
ans += i
if n / i != i {
ans += (n/i)
}
}
}