문제
https://www.acmicpc.net/problem/2501
코드
l =list(map(int,input().split()))
N = l[0]
K = l[1]
divisor=[]
try:
for i in range(1,N+1):
if N % i == 0:
divisor.append(i)
print(divisor[K-1])
except IndexError:
print(0)
풀이
입력 값이 N K로 주어지고, N의 약수들 중 K번째로 작은 수를 출력한다.
→ N의 약수를 구해 List에 오름차순으로 저장하고, K번째로 큰 약수를 print 한다.
- 입력 처리) input()으로 입력받은 값을 공백을 기준으로 split해준 다음, 각 요소를 int형으로 형변환 해준다. → 변환 된 요소들은 list()를 이용해 최종적으로 리스트 l 생성
- map(적용할 함수, iterable) : 2개 이상의 요소들에 반복적으로 특정 함수를 적용할 때 사용한다. (for과 비슷)
- 입력값 중 N을 num에 저장한다.
- 약수가 저장될 리스트 divisor을 초기화한다.
- try - except를 이용해 K가 N의 약수 개수를 초과할 경우 → 0 출력 처리
- 이때 인덱스를 초과하는 오류이므로, IndexError 처리
- 약수 구하기 위한 for문
- 약수가 1부터 시작이므로 for문의 range(1, n+1)로 설정
- 약수 == 나눴을 때 나머지가 0인 수 → if문 - append 처리
- divisor가 완성된 후, K번째 (인덱스이므로 -1) 약수를 print함
다른 풀이
N, K = map(int, input().split())
result = 0
for i in range(1,N+1):
if N%1 == 0:
K -=1
if K == 0:
result = i
break
print(result)
- 생각해보니 list로 변환할 필요가 없었다,,(!!!) 2개밖에 나오지 않으므로 위처럼 직접 대응시켜주는게 더 간단하다.
- K번째로 작은 수니까, 약수가 오름차순으로 증가할때마다 K-1을 해주고 K==0일때 → 즉 K번째 약수가 나왔을 때 멈추고(break) 빠져나와 그 값을 리턴한다.
- ex) K == 2 // 2번째로 작은 수 → 1번째(1 고정) , 2(=K) - 1 = K → 2번째, i가 2라면 1 - 1 == 0 이므로 result = 2가 되며 끝
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 2460번_ 지능형 기차 2 (0) | 2022.07.26 |
---|---|
[Python] 백준 10818번_ 최소, 최대 (0) | 2022.07.26 |
[Python] 백준 3460번_ 이진수 (0) | 2022.07.26 |
[Python] 백준 1978번_ 소수 찾기 (0) | 2022.07.24 |
[Python] 백준 2693번_ N번째 큰 수 (0) | 2022.07.22 |