티스토리 뷰

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