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

neoneoneo·2024년 2월 27일
0

kotlin

목록 보기
13/49

문제

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

나의 풀이

class Solution {
    fun solution(left: Int, right: Int): Int {
        var answer: Int = 0
        for (i in left..right) {
            var temp = 0
            for (j in 1..i) {
                if (i % j == 0) temp++
            }
            if(temp % 2 == 0) answer += i  else answer -= i
        }     
        return answer
    }
}

고수의 풀이

class Solution {
    fun solution(left: Int, right: Int): Int {
        return (left..right).map { i -> if ((1..i).filter { i % it == 0 }.size % 2 == 0) i else -i }.sum()
    }
}

배운점

  • 이번에도 고수는 map을 사용했다. 문제를 풀면서 분명 람다식으로 풀 수 있을 것 같다는 생각은 들었지만.. 시도는 못했다.
  • map의 활용
    • i -> if(1..i) : 1..i의 범위에서 i의 약수를 찾는다.
    • .filter {i % it == 0} : i를 해당 범위의 각 숫자로 나눠서 약수를 찾아낸다.
    • .size % 2 == 0 : 찾아낸 약수의 개수가 짝수인지 확인한다.
    • 짝수일 경우에는 i, 그렇지 않은 경우에는 -i로 저장(?)하고 마지막에 .sum() 계산을 한다.

[TIL-240227]

0개의 댓글