jyamethyst21 님의 블로그

백준 2501번 - 약수 구하기 (PYTHON 풀이) 본문

CODING 💻

백준 2501번 - 약수 구하기 (PYTHON 풀이)

jyamethyst21 2025. 9. 1. 19:43

문제:

문제는 위와 같다. 약수를 계산한 뒤에 두번째로 입력받은 수만큼 작은 수를 출력해주는 프로그램이다. 문제만 딱 읽고 나서는 쉽다고 생각해서 코드를 써내려갔다.

 

k=[]
a,b=map(int,input().split())
for i in range(1,a+1):
    if a % i == 0:
        k.append(i)
sorted_number=sorted(k)
print(sorted_number[b-1])

그런데 이상하게도 런타임 에러가 났다. 알고보니 a의 약수 개수가 b보다 작은 경우를 생각해야 한다는 것을 꺠달았다..

수정코드는 다음과 같다.

 

답:

k=[]
a,b=map(int,input().split())
for i in range(1,a+1):
    if a % i == 0:
        k.append(i)

if len(k) >= b:
    print(k[b-1])
else:
    print(0)

문제 풀이를 간단하게 해보면, 어제 업로드한 코드 문제에서 약수 구하는 방법을 배웠었다! 이를 상기하며 풀면 쉽다.

1부터 입력받은 값만큼 루프를 돌건데, 이때 각 값을 a와 나누고 이 값이 0인 수만(약수) k라는 리스트에 담는다. 이 길이가 두번째로 입력받았던 b보다 클 경우에는 문제가 없으니 해당 값을 출력하고, 작을 경우에는 길이 문제가 발생하기 때문에 0을 출력하도록 예외 처리를 해준다.

인덱스에서 -1 을 하는 이유는 인덱스는 0부터 시작하기 때문이다!

 

이래서 문제를 잘 읽어야 한다..! 나와 같은 실수를 하지 않도록 문제를 꼭.. 꼼꼼하게 읽고 풀길 바란다