[프로그래머스/Python] Lv1. 약수의 합

JiWOn·2023년 1월 3일
0

프로그래머스

목록 보기
1/4

문제

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

제한 사항

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

내가 작성한 코드💻

def solution(n):
    i = 1
    answer = 0
    while 1:
        if n==i:
            answer += i
            break
        elif n % i == 0:
            answer += i
        i+=1
    return answer

💡내 생각은..

  1. n을 나눌 i가 필요함
  2. i가 n일때 까지 계속 반복해야함 -> 무한루프
    2-1. n==i 일 때까지니까 이때 break
    2-2. i로 나눠질 때 answer에 i값 더하기
    2-3. 안 나눠질때는 그냥 넘어가기
    2-4. i값이 1씩 커져야함

코드실행까진 ok... but

문제발생

❌테스트 16에서 멈춤❌

이유 : n=0일때....!

그렇다.. n=0이 될 수도 있다는 것..

🔨 내가 수정한 코드

def solution(n):
    i = 1
    answer = 0
    while 1:
        if n==0:
            answer = n
            break
        elif n==i:
            answer += i
            break
        elif n % i == 0:
            answer += i
        i+=1
    return answer

그냥 n==0일 때를 추가..
너무 단순한가..? 싶긴했지만
완료는 했음..

다른 사람들의 풀이.... 😥

왜 보는데 눈물이 나지..
이렇게 간단하게 쓸 수 있다는 것인가..

한줄 코드가 이렇게 많을 수가..
딴사람들이 쓴거보고 진짜 눈물을 광광

알고리즘

  • 일단 약수는 n/2 값보다 클수는 없음
    같을 순 있지만 클 수는 없다
    여기서 시간을 확 줄일 수 있다!!...

  • 그리고 어차피 자기자신은 더하게 됨

  • 파이썬엔 sum함수가 있음!!!

.... 충격을 받았음
앞으로 이거 하면서 더 충격을 받겠지요?

그래서 보고난 후 다시 짠 코드
😎 물론 다른사람 코드지만...

n+sum([i for i in range(1,n//2+1) if n%i==0])

소감

문제를 더 열심히보고..
문해력을 늘리고..
한줄로 줄이는 연습도 하고..
해야겠다~!

0개의 댓글