https://school.programmers.co.kr/learn/courses/30/lessons/12923
첫 번째 시도
무조건 시간 초과가 날 것같다고 생각했고 그래도 확인해보았다. - 당연히 시간 초과
def solution1(begin, end):
stack = [0] * (end)
row = end // 2
for r in range(1, row+1):
for c in range(r*2, end+1, r):
if c == 1:
stack[c-1] = 0
stack[c-1] = r
return stack[begin-1:end]
두 번째 시도
약수 중 자기 자신을 제외한 숫자중 제일 큰 숫자를 stack에 쌓았다.
효율성 테스트에서 시간 초과가 아닌 실패가 떠서 문제를 다시 읽어본 후
10**7 블록까지 제한 한다는 조건을 확인하여 수정 후 풀었다.
def divisor(n):
if n == 1:
return 0
for i in range(2, int(n**(1/2))+1):
if n % i == 0:
if n // i <= 10**7:
return n // i
return 1
def solution(begin, end):
stack = []
for idx, c in enumerate(range(begin, end+1)):
stack.append(divisor(c))
return stack
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] / [Level 3] / [Python] 베스트앨범 (0) | 2023.01.06 |
---|---|
[프로그래머스] / [Level 2] / [Python] 순위 검색 (0) | 2022.11.05 |
[Level 2] / [Python] N-Queen (0) | 2022.10.19 |
[Level 2] / [Python] 후보키 (0) | 2022.10.18 |
[Level 1] / [Python] 숫자 문자열과 영단어 (0) | 2022.10.14 |