[PRGMS] 숫자 블록

BbickBbick_Develop·2022년 9월 24일
0

PRGMS lv2

목록 보기
3/3
post-thumbnail

정답 코드

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) 가능

profile
삑삑도요가 되자

0개의 댓글