오늘 알고리즘 문제를 풀다가, 해설을 보고 풀었는데도 이해가 잘 안되는 문제가 있어서 블로그에 올리게 되었다.
문제 설명:
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항:
n은 0 이상 3000이하인 정수입니다.
입출력 예:
n return
12 28
5 6
입출력 예 설명:
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
//1
func solution(_ n:Int) -> Int {
let divisors = (1...n).filter { n % $0 == 0 }
let sum = divisors.reduce(0, +)
return sum
1번 답은 나의 베프 gpt를 활용해 얻어낸 결과이다.
설명을 하자면, filter라는 메서드를 활용해 n이라는 값에 적용한 후, 그 값이 0과 같다면 이라는 divisors 상수를 생성했다.
그리고 reduce 메서드는 Swift에서 컬렉션(배열 또는 다른 시퀀스)의 모든 요소를 하나의 값으로 결합하는 데 사용된다.
reduce를 하면 윗 줄의 filter 된 값을 하나로 만들어줄 것이며 +를 뒤에 추가해주면 그 값을 다 더할 수 있다.
//2
func solution(_ n:Int) -> Int {
var sum = 0
for i in 1..<n + 1 {
if n % i == 0 {
sum += i
}
}
return sum
}
이 방식은 간단하다.
단 for i in 1..<n + 1 { 이 줄이 조금 애매한 부분이 있다.
코드를 1...n으로 돌렸을 때는 오류가 떠서 이 방식으로 진행을 했다.
아마 범위가 광범위해서 그렇다고 검색을 하다 본 것같다.
아직도 알고리즘을 풀어도 뭔가 찝찝하다...