일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 코딩더매트릭스
- 주식분석
- 텐서플로
- 그래프이론
- python
- Sort
- 파이썬
- graph
- effective python
- tensorflow
- NumPy
- yarn
- GRU
- scrapy
- 선형대수
- hive
- LSTM
- collections
- 딥러닝
- C언어
- 하둡2
- C
- Java
- HelloWorld
- RNN
- recursion
- codingthematrix
- 하이브
- hadoop2
- Today
- Total
EXCELSIOR
[Level1] 최대공약수와 최소공배수 (gcdlcm) 본문
1. 문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다. |
2. 풀이
- 풀이에 앞서 최대공약수를 구하는 방법인 유클리드 호제법에 대해 공부해 보자
1) 유클리드 호제법 두 정수 a, b의 최대공약수를 G(a, b)라고 하자. [네이버 지식백과] 유클리드 호제법 (통합논술 개념어 사전, 2007. 12. 15., 청서출판) |
1) 내가 작성한(?) 코드
- 이번 문제를 풀면서 아직 많이 부족하다는 것을 다시 한번 느끼게 되었다.
def gcdlcm(a, b): answer = [] tmp = a tmp2 = b if b>a: tmp = a a = b b = tmp tmp2 = a mod = a%b while mod>0: a = b b = mod mod = a%b answer.append(b) if b==1: answer.append(tmp*tmp2) elif b>1: answer.append(int(b*tmp/b*tmp2/b)) return answer # 아래는 테스트로 출력해 보기 위한 코드입니다. print(gcdlcm(3,12))
def gcdlcm(a, b): def _gcd(x,y): if y==0: return x return _gcd(y,x%y) g = _gcd(a,b) return [ g, a*b//g ] # '//' 은 나눗셈의 몫 # 아래는 테스트로 출력해 보기 위한 코드입니다. print(gcdlcm(3,12))
② 간단한 해결 방법
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 # 아래는 테스트로 출력해 보기 위한 코드입니다. print(gcdlcm(3,12))
'Python > 알고리즘_문제' 카테고리의 다른 글
[Level1] 피보나치 수 (Fibonacci) (0) | 2016.11.11 |
---|---|
[Level1] 행렬의 덧셈 (sumMatrix) (0) | 2016.11.07 |
[Level1] 같은 숫자는 싫어 (no_continuous) (4) | 2016.11.02 |
[Level1] 딕셔너리 정렬 (sort_dictionary) (0) | 2016.10.24 |
[Level1]문자열 내 마음대로 정렬하기 (strange_sort) (0) | 2016.10.22 |