코딩 테스트/프로그래머스

[Swift] 프로그래머스(lv.1) 06 - 약수의 개수와 덧셈

말차프라푸치노 2022. 2. 26. 16:10

약수의 개수와 덧셈

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

 

 

문제 풀이

  1. left...right 까지 for-in 루프를 돌며 약수의 개수를 확인한다.
  2. 1부터 해당 숫자 (코드 상에서는 num)까지 for-in 루프를 돌며 약수의 개수를 센다.
  3. 약수의 개수가 짝수면 result에 해당 숫자를 더해주고, 홀수면 빼준다.

 

코드

내 코드

import Foundation

func solution(_ left:Int, _ right:Int) -> Int {
   
    var result = 0
    
    for num in left...right {
        var count = 0;
        
        for divisor in 1...num {
            if(num % divisor == 0){
                count += 1
            }
        }
        result = (count % 2 == 0) ? result + num : result - num 
    }
    
    return result
}

 

 

깔끔한 코드

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, +)
}

map, filter, reduce를 사용해 한 줄로 코드를 작성했다.

 

 

 

후기

문제를 이해하기만 하면 구현하는데 큰 어려움이 없는 문제였다.