본문 바로가기
Algorithm

[프로그래머스] 약수의 개수와 덧셈

by giop15 2021. 8. 3.
반응형

https://programmers.co.kr/learn/courses/30/lessons/77884

 

코딩테스트 연습 - 약수의 개수와 덧셈

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

programmers.co.kr

문제 설명

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


제한사항

  • 1 ≤ left  right ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

문제풀이

1. 수를 key로하고, 약수의 개수를 value로 하는 딕셔너리(divisorDic)와 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수(sum)를 저장하는 변수들을 선언

2. for문을 사용하여 left부터right까지 약수들의 개수를 구한다음 수(num)를 키로하고 약수의 개수(count)를 value로 설정하여 딕셔너리에 insert를 한다.

3. 딕셔너리(divisorDic)를 for문을 이용하여 약수의 개수(value)가 짝수이면 수(key)를 더하고, 홀수이면 뺀다. 결과값(sum)을 return한다.

func solution(_ left:Int, _ right:Int) -> Int {
    var divisorDic = [Int: Int]()
    var sum = 0

    for num in left...right {
        var count = 0
        for i in 1...num {
            if num % i == 0 {
                count += 1
            }
        }
        divisorDic.updateValue(count, forKey: num)
    }

    for (key, value) in divisorDic {
        if value % 2 == 0 {
            sum += key
        } else {
            sum -= key
        }
    }

    return sum
}
반응형