국문과 유목민

20. 약수의 합 본문

알고리즘_코딩테스트/프로그래머스_Level1

20. 약수의 합

논곰 2020. 9. 10. 22:15

0. 문제

링크) https://programmers.co.kr/learn/courses/30/lessons/12928

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr


1. 알고리즘 계획

  1. for문을 돌면서 입력변수와 나누어 떨어지는 변수들로 리스트를 만든다. (리스트 컴프리핸션 이용)
  2. 리스트의 값을 모두 더한다 (sum함수 이용)


2. 나의 코드

def solution(n):
    answer = 0
    ls = [idx for idx in range(1, n+1) if n % idx == 0]
    answer = sum(ls)
    return answer


3. 다른 사람의 코드

def solution2(num):
    # num / 2 의 수들만 검사하면 성능 약 2배 향상
    return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])

- num/2의 수들만 for문을 돌게함으로써 성능의 약 2배를 향상시킬 수 있다.

- 만약 12의 경우 1, 2, 3, 6, 12이기에, 1, 2, 3, 6까지만 for문을 돌고, 나중에 num의 값을 더해주는 방식으로 계산


4. 정리 및 리뷰

- 이 문제 또한 파이썬 수업을 들으면서 처음쯤 시도했었던 문제였다.

- answer에 값을 대입한다거나 하지 않고, 바로 return을 시켜주면 조금 더 코드를 직관적으로 볼 수 있게 할 수 있다는 것을 알았다. 


코드 만족도: ★★★


Comments