Day Coding

ChoiDevv·2022년 12월 12일
0

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120897

내가 쓴 코드

def solution(n):
    divide_number = 1
    answer = []
    while True:
        if divide_number in answer:
            return sorted(answer)

        if n % divide_number == 0:
            answer.append(n // divide_number)
            answer.append(divide_number)
        divide_number += 1

이 풀이는 정답이 되긴 하지만 런타임 에러와 1번 케이스는 틀리게 된다. 그래서 많은 방법을 생각했는데 입력받은 n을 2로 나눈 만큼만 반복해서 해보았다.

수정한 코드

def solution(n):
    answer = []
    for i in range(1, n // 2 + 1):
        if n % i == 0:
            answer.append(i)
    answer.append(n)

    return answer
24 -> [1, 2, 3, 4, 6, 8, 12, 24]
12 -> [1, 2, 3, 4, 6, 12]
30 -> [1, 2, 3, 5, 6, 10, 15, 30]
9 -> [1, 3, 9]

규칙을 보면 자기 자신의 수에 항상 나눈 2의 값이 나오는 것을 확인할 수 있다. 그렇기에 이 부분만 반복해서 출력해주면 될 거 같았고 정답이 되었다. 홀수면 짝수에 비해 필요없는 반복문이 몇 번 들어가지만 그래도 2로 나눈 수보다는 작다는 것을 알 수 있다. 이외에도 양의 제곱근으로 풀거나 하는 다양한 방식이 있는데 나는 이 방법이 제일 괜찮았다고 생각했다.

profile
기억보단 기록을

0개의 댓글