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 | 31 |
Tags
- 오블완
- JWT
- viewsets
- 아티클 스터디
- flask
- Doker
- 코딩테스트
- 자료구조
- git
- 장고
- Til
- 세션(Session)
- ERD
- Python
- docker
- CS
- 쿠키(cookie)
- 파이썬
- 연습
- 개발공부
- SQL
- github
- django
- web
- Wil
- redis
- nginx
- 티스토리챌린지
- 도커
- NoSQL
Archives
- Today
- Total
SteadyDrills
약수를 구하는 방법 본문
241111
오늘 공부한 것은 문제를 풀다 알게 된 약수를 구하는 방법이다.
처음에는 단순하게 내가 생각한 방식으로 코드를 구현했는데....
시간 초과가 나왔다. 시간 복잡도는 O(n) 이여서 그렇게 느리다고는 생각 안 했지만
수가 커지고 양이 많은 테스트 문제에는 효율이 많이 안 좋았던 거 같다.
def find_divisors_basic(n):
divisors = []
for i in range(1, n + 1):
if n % i == 0:
divisors.append(i)
return divisors
# 예시
n = 12
print(find_divisors_basic(n)) # 출력: [1, 2, 3, 4, 6, 12]
그 후에 찾아보고 알게 된 것은 제곱근을 사용하는 방법이다.
def find_divisors_sqrt(n):
divisors = []
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
divisors.append(i)
if i != n // i:
divisors.append(n // i)
return divisors
# 예시
n = 12
print(find_divisors_sqrt(n)) # 출력: [1, 2, 3, 4, 6, 12]
이 방법은 약수는 하나의 쌍으로서 존재하기 때문에 사용할 수 있는 방법이다. 예를 들면 코드에 나왔듯 [1,12], [2,6], [3,4]
이렇게 짝이 되는 수를 한 번에 제곱근까지만 찾으면 효율성이 극대화된다. 시간 복잡도는 (O(√n))이다.
최종적으로 N이 커질수록 제곱근으로 구하는 방식이 더 효율이 좋다는 결론이다.
오늘 배운건 특정 자료의 성질을 이용하면 효율을 극대화할 수 있다는 점이었다.
'PYTHON' 카테고리의 다른 글
이스케이프 문자(escape character) (0) | 2024.12.11 |
---|---|
input()과 sys.stdin.readline()의 차이 (1) | 2024.11.27 |
[TIL]코딩 테스트 SQL - 주문량이 많은 아이스크림들 조회하기 (0) | 2024.08.05 |
[TIL]코딩 테스트 연습 문제 - 숫자 문자열 (0) | 2024.08.01 |
[TIL] 코딩 테스트 연습문제 - 시저 암호 (0) | 2024.07.31 |