2024. 2. 19. 14:41ㆍ파이썬_알고리즘(코딩테스트)/level1

내가 제출한 코드
import math
def solution(n, m):
# 최대공약수
a = math.gcd(n,m)
# 최소공배수
b = n * m // a
return [a,b]
사실 처음에 코드를 어떻게 쳐야할지 감이 안잡혀서 구글에 검색을 했다.
그랬더니 파이썬 'math'모듈에 최대공약수를 계산하는 'gcd'함수가 내장되어 있는걸 알 수 있었다.
- 최대공약수 계산 : math.gcd(n, m)
- 최소공배수 계산 : n * m // a
- 두 수의 곱을 그 두 수의 최대공약수로 나눈 값으로 계산할 수 있다.
다른 사람이 제출한 코드 1
def gcdlcm(a, b):
c,d = max(a, b), min(a, b)
t = 1
while t>0:
t = c%d
c, d = d, t
answer = [ c, int (a*b/c)]
return answer
- 변수 초기화
- a,b중 최댓값은 c, 최솟값은 d로 초기화된다.
- 이는 유클리드 알고리즘에서 큰 수를 작은 수로 나누기 위한 준비과정이다.
- 유클리드 알고리즘 실행
- while 루프 내부에서 t에는 c를 d로 나눈 나머지가 저장된다
- c에는 d의 값을, d에는 t의 값을 할당한다.
- 이 과정은 c와 d의 최대공약수를 찾을 때까지 계속된다.
- 최소공배수 계산
- a와 b의 곱을 최대공약수인 c로 나눈 값으로 계산된다.
다른 사람이 제출한 코드 2
def solution(n, m):
gcd = lambda a,b : b if not a%b else gcd(b, a%b)
lcm = lambda a,b : a*b//gcd(a,b)
return [gcd(n, m), lcm(n, m)]
- gcd
- a를 b로 나눈 나머지가 0이라면 b를 반환
- b는 a와 b의 최대공약수이다.
- 만약 a를 b로 나눈 나머지가 0이 아니라면(else부분)
- a가 b로 나누어 떨어지지 않는다면 함수는 자신을 다시 호출한다.
- lcm
- a와 b의 곱을 최대공약수인 gcd(a,b)로 나눈 값으로 계산된다.
'파이썬_알고리즘(코딩테스트) > level1' 카테고리의 다른 글
| level1_3진법 뒤집기 (0) | 2024.02.22 |
|---|---|
| level1_같은 숫자는 싫어(스택/큐) (0) | 2024.02.21 |
| level1_직사각형 별찍기 (0) | 2024.02.06 |
| level1_행렬의 덧셈 (0) | 2024.02.04 |
| level1_문자열 다루기 기본 (0) | 2024.02.04 |