정답 코드
def solution(begin, end):
answer = []
for i in range(begin, end+1):
k = int(i != 1) # 소수도 있으므로 1을 일단 대입함.
for j in range(2, int(i**0.5)+1): # i**0.5 == sqrt(i)
if i%j == 0 and i//j <= 10000000: # 약수가 될 수 있는 최대 숫자는 10,000,000
k = i//j # j가 2부터 커지기 때문에 처음 만나는 i//j가 약수 중 가장 큰 값(그 때 멈춤)
break
answer.append(k)
return answer
공부할 거리
1. 최대 약수 구하는 법 -> 약수는 sqrt(x)를 통해 쉽게 구할 수 있음. 왜냐하면 sqrt(x) 이전까지만 구해도 충분하기 때문
2. 숫자가 10억을 넘어가면 O(n)만 되도 당연히 못풂
3. 1천만의 sqrt(10000000)은 10,000이므로 쉽게 이중배열 가능
4. 10,000x10,000 = 10,000,000이므로 O(n) 가능