BOJ : 2501 약수구하기 [python]
BOJ : 약수구하기 (2501)
정답여부 : O
소요시간 : 15분
N, index = map(int, input().split())
cnt = 0
for i in range(1, (N // 2) + 1): ------ (A)
if (N % i == 0):
cnt += 1
if (cnt == index):
print(i)
break
if (cnt + 1 == index):
print(N)
elif (cnt < index):
print(0)
리뷰
리스트를 만들어서 값들을 넣은 후, index에 해당하는 값을 꺼내려다가
불필요해보여서 한번 for문 돌면서 접근하는대로 print하도록 구현
헤맨점
자기 자신을 약수로 두는 점을 예외처리 못했다.
15번 줄 cnt+1 == index인 경우가 자기 자신인 경우이다.
풀이 2
위 코드에서 (A) 부분에 아래와 같이 변경.
for i in range(1, math.ceil(math.sqrt(N)) + 1):
이렇게 풀면, 조금 더 연산 시간을 줄일 수 있다.
N의 약수는 N^0.5의 올림까지만 적용해보면 된다.
math.ceil -> 올림 , math.sqrt -> 루트(^0.5)
단, import math 해야한다.
Author And Source
이 문제에 관하여(BOJ : 2501 약수구하기 [python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@brianpark0500/BOJ-2501-약수구하기-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)