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로 나눈 수보다는 작다는 것을 알 수 있다. 이외에도 양의 제곱근으로 풀거나 하는 다양한 방식이 있는데 나는 이 방법이 제일 괜찮았다고 생각했다.