2501번: 약수 구하기
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
www.acmicpc.net
더보기
문제
어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
6을 예로 들면
6 ÷ 1 = 6 … 0
6 ÷ 2 = 3 … 0
6 ÷ 3 = 2 … 0
6 ÷ 4 = 1 … 2
6 ÷ 5 = 1 … 1
6 ÷ 6 = 1 … 0
그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.
두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
출력
첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.
과정
- 자연수와 몇번째로 작은 약수를 원하는지 순번을 입력 받는다.
- 1부터 입력받은 자연수 까지 나머지가 0인 수를 리스트에 저장해준다.
- 만약 리스트의 길이가 입력받은 원하는 순번보다 작으면 0을 출력한다.
- 그렇지 않다면 리스트에서 입력받은 순번의 숫자를 출력한다.
예제 입력
6 3
예제 출력
3
풀이
N, K = map(int, input().split())
divisor = []
for i in range(1, N+1):
if N % i == 0:
divisor.append(i)
if len(divisor) < K:
print(0)
else:
print(divisor[K-1])
한 줄씩 코드 해석해보기
N, K = map(int, input().split())
- map에 int와 input().split()을 넣으면 split의 결과를 모두 int로 변환
divisor = []
- 약수를 저장할 리스트 생성
for i in range(1, N+1):
if N % i == 0:
divisor.append(i)
- 1~N 까지 for문을 돌리고 나누어진 나머지가 0이되는 약수를 divisor에 저장
if len(divisor) < K:
print(0)
else:
print(divisor[K-1])
- divisor의 길이가 K보다 작을 경우 0을 출력
- 그 외일 경우 K-1의 위치의 값을 출력
'코딩 테스트 (Python) > 백준' 카테고리의 다른 글
[백준] 1021번 회전하는 큐 (Python) (0) | 2024.01.04 |
---|---|
[백준] 10866번 덱 (Python) (0) | 2024.01.04 |
[백준] 2164번 카드2 (Python) (0) | 2024.01.04 |
[백준] 3460번 이진수 (Python) (0) | 2024.01.03 |
[백준] 10809번 알파벳 찾기 (Python) (0) | 2024.01.03 |