Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- type hint
- python
- 선그래프
- pandas
- 정보처리기사 c언어
- queue
- 백준
- dataframe
- Algorithm
- String Method
- NumPy
- MySQL
- 프로그래머스
- 알고리즘
- 알고리즘스터디
- 가상환경
- Matplotlib
- 파이썬
- 노마드코딩
- 자료구조
- javascript
- openCV
- aws jupyter notebook
- Selenium
- 알고리즘 스터디
- Join
- Stack
- programmers
- 코딩테스트
- 데이터시각화
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Algorithm] 기초 문제 / K번째 약수 본문
▶ 문제
어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
6의 약수는 1, 2, 3, 6, 총 네 개이다. 두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
▶ 입력 설명
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
▶ 출력 설명
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
▶ 입력
6 3
▶ 출력
3
▷ 내가 짜본 코드
import sys
sys.stdin = open('input.txt', 'rt')
n, k = map(int, input().split())
a = []
for i in range(1, n+1):
if n % i == 0:
a.append(i)
if len(a) < k:
print(-1)
else:
print(a[k-1])
k번째 작은 수를 구해야 하기 때문에 index를 활용해야 한다고 생각했다.
그러기 위해서 약수들을 배열에 넣어 저장한 후 [k-1] index를 출력했다.
b = [i for i in range(1, n+1) if n % i == 0]
if len(b) < k:
print(-1)
else:
print((b[k-1]))
최근에 배운 반복문 간소화 문법으로 이렇게 한줄로 줄이는 것도 연습해 봤다.
한 줄로 코드가 정리되는 걸 보니 신기하다....
▷ 예시 코드
cnt=0
for i in range(1, n+1):
if n%i==0:
cnt+=1
if cnt==k:
print(i)
break
else:
print(-1)
예시 코드에서는 숫자를 다른 데이터 타입으로 바꾸지 않고 그대로 사용하였다.
약수의 개수 자체를 counting 해서 쌓은 후에, k번째 counting한 값을 바로 출력하는 방식이다.
k번째 값을 찾으면 조건문과 반복문을 끝내고, k값을 찾지 못한다면 -1을 출력한다.
혼자 생각하기는 어려운 방법이라 계속 곱씹어 보게 된다.
'DataStructure & Algorithm > 문제풀이' 카테고리의 다른 글
[Algorithm] 기초 문제 / 뒤집은 소수 (0) | 2022.09.05 |
---|---|
[Algorithm] 기초 문제 / 소수(에라토스테네스 체) (0) | 2022.08.31 |
[Algorithm] 기초 문제 / 자릿수의 합 (0) | 2022.08.29 |
[Algorithm] 기초 문제 / K번째 큰 수 (0) | 2022.08.27 |
[Algorithm] 기초 문제 / K번째 수 (0) | 2022.08.27 |