BOJ_2501 약수 구하기
- TOC {:toc}
이 글은 백준 온라인 저지의 2501번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.03.29
메모리 | 시간 | 코드 길이 |
---|---|---|
28776 KB | 76 ms | 229 B |
N, K = map(int, input().split())
r = N ** 0.5
# 빈 리스트를 만든 뒤
f = []
for i in range(1, int(r) + 1):
# N이 i로 나누어떨어질 경우
if N % i == 0:
# 그 수와 N을 수로 나눈 값을 리스트에 추가한다.
f.extend([i, N // i])
# 주어진 수가 그 수의 제곱근으로 나누어 떨어질 경우
if N % r == 0:
# 제곱근을 f에서 제거한다.
f.remove(r)
# 리스트를 정렬한 뒤
f.sort()
if len(f) < K:
print(0)
else:
# K 번째 원소(인덱스: K-1)를 출력한다.
print(f[K - 1])
아이디어 & 풀이
주어진 수의 제곱근까지 순환하면서 약수 쌍을 리스트에 추가한다.
- 주어진 수가 제곱수인 경우 그 수의 제곱근은 리스트에 두 번 추가되기 때문에 하나 제거한다.
피드백
- 굳이 제곱근 사용해서 복잡하게 작성할 필요 없이 해당 수까지 순회해도 괜찮았다.
참고 답안
a, b = map(int, input().split())
# 약수 배열 구성
c = [i for i in range(1, a + 1) if a % i == 0]
print(0 if len(c) < b else c[b - 1])
아이디어 & 풀이
입력받은 수 a
가 나누어떨어지는 수 i
에 대해서만 리스트를 구성한다.
- 약수를 구성할 때 조건문과 반복문을 한 줄로 간결하게 작성해 조건에 맞게 리스트의 원소를 생성할 수 있다.
- for 문과 if문을 한 번에 - List comprehension의 if 문 by 파이썬을 파이썬답게
- [python] for문, if문 한 줄로 코딩하기 (for and if in one line) by 슈퍼짱짱
-
ps-python