본문 바로가기
챌린지/코딩 테스트 30일 챌린지

[코딩 테스트 30일 챌린지] : 01

by 오주현 2022. 6. 12.
반응형
코딩 테스트 30일 챌린지

푼 문제 수 : 1
문제 요약

n,k를 입력 받아 n의 약수 중 k번째 작은 수를 출력하라. 이 외 약수가 없다면 -1 출력

 

입, 출력 예제

입력:

6 3

 

출력:

3

 

풀이
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)

n과 k를 int 형식으로 받는다. 입력 예제가 6 3으로 띄어쓰기로 구분되어 있기 때문에 split 공백을 통해 구분하여 각각 n과 k에 값을 넣어준다.

 

k번째 약수를 체크하기 위해 cnt를 넣어 n의 약수의 수를 카운팅해준다.

 

for문을 통해 1부터 6까지 반복되게 해준다. 원래는 0부터 5까지해서 6회 반복이지만, 약수에 0이 없으므로 1을 넣어주고 n+1을 해준다.

 

첫 if문을 통해 n의 나머지가 0일 때 즉, 약수일 때 cnt를 1씩 증가시켜 첫 번째 약수, 두 번째 약수 처럼 번째를 구분해준다.

 

두번 째 if문을 통해 위에서 구분한 약수 번째를 k와 비교하여 같을 때 즉, k번째 약수가 될 때 k번째 약수인 i를 출력하게 하고 break를 걸어준다.

 

만약 약수가 없을 때 -1을 출력해야 한다면 for else를 통해 for문이 break에 걸리지 않고 정상적으로 마무리 되었을 때 실행되도록 하여 print로 -1을 찍어준다.


 

 

 

반응형

댓글