[프로그래머스 Lv. 2] 숫자 블록

DaeHoon·2023년 1월 14일
0

문제

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

접근

1) result에 들어가는 값은 자기 자신을 제외한 해당 번호의 최대 약수다.

2) 약수 구하는 알고리즘에서 for문을 2부터 시작하게 두고 가장 먼저 조건에 걸리는 수를 반환하는 함수를 만든다.
2-1) 이 때 최대 10000000번 블록까지 사용한다고 명시되어 있으므로 n // i <= 10000000 결과에 대해서는 1을 반환하게 한다. 10000000을 넘어가는 소수에 대한 도로를 1로 두기 위함이다.

3) begin, end +1만큼 for문을 돌리고 위에 2)에서 만든 함수를 호출한다.

Code

def getMaxDivisor(n):
    divisorsList = []
    ret = 1
    for i in range(2, int(n**(1/2)) + 1):
        if n%i == 0 and n//i <= 10000000:
            ret = n//i
            break
    return ret   

def solution(begin, end):
    answer = []
    for i in range(begin, end+1):
        if i == 1:
            answer.append(0)
            continue
        answer.append(getMyDivisor(i))
    return answer
profile
평범한 백엔드 개발자

0개의 댓글