코딩 테스트 (Python)/백준

[백준] 2501번 약수 구하기 (Python)

hihyuk 2024. 1. 3. 18:13
 

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. 자연수와 몇번째로 작은 약수를 원하는지 순번을 입력 받는다.
  2. 1부터 입력받은 자연수 까지 나머지가 0인 수를 리스트에 저장해준다.
  3. 만약 리스트의 길이가 입력받은 원하는 순번보다 작으면 0을 출력한다.
  4. 그렇지 않다면 리스트에서 입력받은 순번의 숫자를 출력한다.

 

예제 입력

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의 위치의 값을 출력