알고리즘 CODEKATA 14 (약수의 합)

오리너구리·2024년 5월 22일
0

CODEKATA

목록 보기
14/57

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.


제한 사항

  • n은 0 이상 3000이하인 정수입니다.

내 풀이

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        var num = n
        
        for(i in 1 .. num){
            
            if(n%i==0){
                answer += i
            }
        }
        
        return answer
    }
}

그냥 n을 i로 나눠서 나머지가 0이면 답에 더 하는걸 반복해서 풀었다!


다른 사람 풀이

class Solution {
    fun solution(n: Int): Int {
        var answer = 0

        answer = (1..n).filter { n % it == 0 }.sum()

        return answer
    }
}

이렇게 함수를 활용해서 더 쉽게 할 수 있었을 듯

아직 함수 사용을 바로 못 떠올리는게 아쉽다!!!!

class Solution {
    fun solution(n: Int): Int {
        var answer = n
        val half = n / 2

        for (i in 1 ..half) {
            if (n % i == 0) {
                answer += i
            }
        }        

        return answer
    }
}

이렇게 수학적인 사고를 조금 더해서 푼다면

약수의 특성을 생각해서 코드 반복 횟수를 줄이는 방법도 있었다.

하지만 이런건 나는 앞으로도 혼자서 절대 떠올릴 수 없을 것 같은뎁쇼

half로 나누는가? (by chatGPT)

  • 모든 약수는 절반 이하에 존재: 예를 들어 28의 약수는 1, 2, 4, 7, 14, 28입니다. 이 중 14를 제외한 약수는 모두 28의 절반인 14 이하입니다.
  • 따라서 약수를 찾는 범위를 1부터 n/2까지로 줄이면, 모든 약수를 찾을 수 있으며 불필요한 반복을 피할 수 있습니다.

더 공부할 것

  1. filter

여담

약수란 단어 너무 오랜만에 봄

수포자 실음충은 모달인터체인지는 익숙한데 약수는 어색함

내가 기억하는 정의 맞는지도 확신 없어서 약수 검색도 해봄.

이런 멍청이가 코딩 공부 할 수 있는걸까?

profile
오리너구리입니다

0개의 댓글