두개의 자연수 N과 K가 주어졌을 때,
N의 약수들 중 K번째로 작은 수를 출력하는 프로그램 작성
*약수 개수가 K보다 작아서 K번째 약수가 존재하지 않을 경우 -1 출력
입력예시)
6 3
출력예시)
3
내가 쓴 코드
n, k = map(int,input().split())
#약수 넣을 리스트
lst = []
#리스트에 약수들 넣음
for i in range(1,n+1):
if n%i == 0:
lst.append(i)
#리스트 오름차순 정렬
lst.sort()
if len(lst) < k:
print(-1)
else:
print(lst[k-1])
모범답안
n, k = map(int, input().split())
cnt = 0
for i in range(1,n+1):
n%i == 0:
cnt+=1
if cnt == k:
print(i)
break
else:
print(-1)
모범답안보고 반성하기
- 굳이 약수들을 넣을 list를 만들지 않고도, cnt 변수 생성을 통해 해결할 수 있었음
- for else 구문을 이용할 생각을 하지 못함 . 난 참 생각을 협소하게 하는것같다 근데 경험이 부족해서 그런거겠지?
- for else 구문은 .. for문이 정상종료 될 경우 else문이 실행되고, for문이 정상종료가 아닌 break로 강제종료 되는 경우에는 else문이 실행되지않는 특징을 가지고 있다.
- 그니까 여기서는 cnt가 k를 도달해서 약수의 개수가 k보다 크거나 같은 경우에는 break로 종료가 되기때문에 else문이 실행되지않고
- cnt가 k를 도달하지 못해서 for문이 자연스럽게 종료되는 경우에는(정상종료) else문이 실행되는 것
반성하고 다시 풀어보기
N, K = map(int, input().split())
cnt = 0
for i in range(1,N+1):
if N%i == 0:
cnt+=1
if cnt == K:
print(i)
break
else:
print(-1)
'코딩테스트 준비 with Python > 내가 보려고 정리하는 문풀' 카테고리의 다른 글
자릿수의 합 (2) | 2024.06.08 |
---|---|
정다면체 (0) | 2024.06.07 |
대표값 (0) | 2024.06.06 |
K번째 큰 수 (0) | 2024.06.06 |
K번째 수 (0) | 2024.06.06 |