알고리즘
[Swift 알고리즘] - 약수의 개수와 덧셈 (Programmers)
Peppo
2022. 10. 18. 10:01
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/77884
문제 사진
내 풀이
import Foundation
func solution(_ left:Int, _ right:Int) -> Int {
let result = Array(left...right).reduce(0) { isEven($1) ? $0 + $1 : $0 - $1 }
return result
}
solution(13, 17)
func isEven(_ num: Int) -> Bool {
var result: [Int] = []
for n in 1...num {
if num % n == 0 {
result.append(n)
}
}
return result.count % 2 == 0 ? true : false
}
- left -> right까지의 수 배열에 넣기
- 배열에 요소마다 약수의 갯수 구하고 갯수가 짝수인지 홀수인지 판별하는 isEven()메서드 구현
- isEven이 true면 +, false 면 - (reduce)사용
다른사람의 풀이
func solution(_ left: Int, _ right: Int) -> Int {
return (left...right).map { i in (1...i).filter { i % $0 == 0 }.count % 2 == 0 ? i : -i }.reduce(0, +)
}
나도 한줄로 끝내보고 싶다아...
배운점
reduce 흐름 파악에 조금더 이해를 할 수 있었던 문제였다.
reduce 사용시 다음값이 짝수인지 홀수 인지 파악을 해야하는데
이전값을 넣으면서 계속 왜안되지 이러고 있었다..
print로 이전값, 다음값을 찍어보니 초기값이 0이니 가장처음 이전값은 0일 수 밖에없어 Fatal error가 났었다.
728x90