[level 1] 최대공약수와 최소공배수 - 12940
성능 요약
메모리: 10.2 MB, 시간: 0.00 ms
구분
코딩테스트 연습 > 연습문제
채점결과
정확성: 100.0
합계: 100.0 / 100.0
제출 일자
2023년 12월 1일 15:8:2
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
- 두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
n | m | return |
---|---|---|
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
풀이
def solution(n, m):
big = max(n, m)
small = min(n, m)
return [gcd(big, small), lcm(big, small)]
def gcd(big, small):
r = 1
while r:
r = big % small
big = small
small = r
return big
def lcm(big, small):
div = gcd(big, small)
return (big * small) // div
느낀점
처음에는 divmod()를 사용하여 문제를 풀려고 시도했다. 내가 if문을 잘못 사용했거나, 문제가 있었는지 문제에 대한 답을 제대로 구하지 못했다. 그래서 최소공배수를 구하는 알고리즘을 찾아본 결과 (두 수의 곱 / 최대공약수)인 것을 다시 한번 생각할 수 있었다.
사실 문제가 간단하니 하나의 함수에서 더 짧고 간결하게 풀 수 있었지만, 각각의 기능을 하는 함수마다 구현을 해보고 싶었고 연습도 해보고 싶어서 위의 풀이처럼 구현을 하게 됐다.
이것도 사실 엄청 마음에 들지는 않지만, 앞으로 더 발전해가면서 코드를 더 잘 구현할 수 있을 거라 생각한다.
'알고리즘' 카테고리의 다른 글
프로그래머스: 푸드 파이트 대회 (0) | 2023.12.20 |
---|---|
프로그래머스: 숫자 문자열과 영단어 (1) | 2023.12.18 |
프로그래머스: 3진법 뒤집기 (1) | 2023.12.17 |
프로그래머스: 이상한 문자 만들기 (0) | 2023.12.16 |
프로그래머스: 예산 (0) | 2023.12.16 |