try 2 times / 난이도 : ★★☆☆☆
문제 확인
2501번: 약수 구하기
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
www.acmicpc.net
코드 깃허브 확인
GitHub - yyeongeun/codingtest: 코딩테스트 공부
코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.
github.com
정답 해설
answer = []
N, k = map(int,input().split())
for i in range(1,N+1):
if N % i == 0:
answer.append(i)
answer.sort() # 이미 값은 sort되어있으므로 굳이 할 필요 없다.
if len(answer) < k: # len(answer)를 변수로 지정해도 된다.
result = 0 # 결과 값을 바로 print 해도 된다.
else:
result = answer[k-1]
print(result)
공부한 내용
1. 약수 = 0 이상 해당 값 이하로 나눴을 때 나머지가 0인 수
2. 다른 코드 이해하기
1. 약수인 경우, k에 1을 빼주고 그 값이 0이 되었을 때 출력해주는 방법
n,k=map(int,input().split())
res=0
for i in range(1,n+1):
if n%i==0:
k-=1
if k==0:
res=i
print(res)
k번째 작은 약수만 구하는 것이므로 전체 약수를 다 구하지 않는 방법이다.
첫번째 약수가 나오면 k* = k-1
두번째 약수가 나오면 k** = k*-1 = k-1-1
이런 식으로 하면,
k번째 약수가 나오면 k***** = k-1*k (->1을 k번 빼준다)
그러므로 n을 i로 나눴을 때 k가 0이 된다면, 해당 i가 k번째 약수이다.
[백준]약수구하기/2501번/파이썬/Python/수학
💡문제 어떤 자연수 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 그래
velog.io
2. 약수인 경우, 새 변수에 1을 더해주고 그 변수가 k가 되면 출력해주는 방법
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
if cnt < K:
print(0)
새 변수명 = cnt
첫번째 약수가 나오면 cnt* = cnt+1
두번째 약수가 나오면 cnt** = cnt*+1 = cnt+1+1
이런 식으로 하면,
k번째 약수가 나오면 cnt***** = cnt+1*k (->1을 k번 더해준다)
그러므로 n을 i로 나눴을 때 cnt가 k이 된다면, 해당 i가 k번째 약수이다.
k번째 약수를 찾으면 if문을 break해준다.
백준 알고리즘 2501번 약수 구하기(python)
단순 수학 문제이다. 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 if cnt < K: print(0)
jinho-study.tistory.com
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 2309번 일곱 난쟁이 (0) | 2022.01.02 |
---|---|
[Python3] 백준 10870번 피보나치 수 5 (0) | 2021.12.31 |
[Python3] 백준 2460번 지능형 기차 2 (0) | 2021.12.29 |
[Python3] 백준 10818번 최소, 최대 (0) | 2021.12.28 |
[Python3] 백준 3460번 이진수 (0) | 2021.12.28 |
댓글