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
- 9020
- kakaocloud
- sequelize
- Java #코딩테스트
- 15552
- 7568
- 카카오 클라우드 스쿨
- kakaocloudschool
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- Java #백준 #코딩테스트
- 24479
- 11054
- 알고리즘
- Spring #Java #Spring Boot #싱글톤
- python
- Java #오븐시계 #백준
- 2447
- SpringTokenizer
- 1110
- Spring #Java #Spring Boot
- 백준
- 코딩테스트
- 카카오클라우드스쿨
- node
- java
- boj
- 파이썬
- 11053
- Spring #Spring Boot #Java
- Spring
Archives
- Today
- Total
YoungSoo
유클리드 호제법 본문
코딩테스트를 공부하다가 최대공약수 혹은 공약수 최소 공배수를 구하는 문제를 많이 접하게 되어
유클리드 호제법을 꼭 알고 가야겠다라는 생각이 들었다
유클리드 호제법이란,
숫자 a, b가 있을 때, a를 b로 나눈 나머지와 b의 최대 공약수는 a와 b의 최대 공약수와 같다는 것을 의미한다.
따라서 최대 공약수를 구하는 코드는 이렇게 된다.
최대공약수
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
최소 공부새는 a, b의 곱을 최대 공약수로 나누면 알 수 있다.
최소공배수
def lcm(a, b):
return a * b / gcd(a, b)
공약수
공약수는 최대 공약수의 약수를 구하면 된다.
따라서 약수를 구하는 법을 알아보려고 한다.
약수를 구하는 방법은 몇 가지 있지만 그 중에서 제일 빠르게 구할 수 있는 방법을 알아보았다.
import sys
input = sys.stdin.readline
n = int(input())
d = set()
d.add(n)
for i in range(2, int(n**0.5)+1):
if n%i == 0:
d.add(i)
if i!=n//i:
d.add(n//i)
print(*d)
for 문을 이용해서 입력받은 수의 제곱근까지의 약수를 구하면 그 짝이 되는 약수는 입력받은 수로 나누면 알 수 있다.
또한 중복 값을 제거해주기 위해 set으로 바꿔주었다.
이렇게 이번에는 최대공약수, 최소공배수, 공약수를 구하는 알고리즘을 알아보았다.
'코딩테스트' 카테고리의 다른 글
| 백준 - 조합 0의 개수(2004 파이썬 풀이) (0) | 2022.12.23 |
|---|---|
| 백준 - 검열(2981 파이썬 풀이) (0) | 2022.12.21 |
| 백준 - 참외밭(2477 파이썬 풀이) (0) | 2022.12.19 |
| 백준 - 체스판 다시 칠하기(1018번 파이썬 풀이) (0) | 2022.12.14 |
| 백준 - 덩치(7568번 파이썬 풀이) (0) | 2022.12.13 |