< 과제 >
[ 문제 ]
어떤 자연수 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 ]
6 3
[예제 출력 1 ]
3[ 예제 입력 2 ]
25 4
[예제 출력 2 ]
0[ 예제 입력 3 ]
2735 1
[예제 출력 3 ]
1
< 내 코드>
str = input()
N = int(str.split(' ')[0])
K = int(str.split(' ')[1])
lst = [] # 약수를 담을 리스트
for i in range(1, N+1): # 약수는 모두 자연수이므로 범위는 1 ~ N+1
if N % i == 0: # 나누어 떨어지는지 확인
lst.append(i) # 나누어 떨어지면 리스트에 추가
try:
print(lst[K-1])
except: # 약수의 개수가 K보다 적으면 IndexError 발생
print(0)
< 피드백 >
str.split()
이라는 코드를 두번 반복하므로 비효율이 발생하는 것 같다. 이 부분을 N, K = map(int, input().split())
으로 바꿔야 할 것 같다.(참고한 블로그)[ input().split() 사용법 ]
변수1, 변수2 = input().split()
→ 문자 사이를 나누는 default 값은 공백임 / split할 문자 지정 가능input()의 결과의 데이터 타입은 문자열임. 따라서 이번 문제와 같이 정수형으로 형변환을 할 필요가 있는데, 여러 개의 변수를 동시에 형변환하는 방법은 map()함수를 사용하는 방법임
[ map() 사용법 ]
변수 = map(변환할 타입, 변환할 문자)
→ 이를 적용하면 아래와 같다.
→ 변수1, 변수2= map(int, input().split())