정수 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
까지로 줄이면, 모든 약수를 찾을 수 있으며 불필요한 반복을 피할 수 있습니다.
약수란 단어 너무 오랜만에 봄
수포자 실음충은 모달인터체인지는 익숙한데 약수는 어색함
내가 기억하는 정의 맞는지도 확신 없어서 약수 검색도 해봄.
이런 멍청이가 코딩 공부 할 수 있는걸까?