기초 수학
[기초수학] 최대공약수 .feat ( sort와 sorted 차이 알아두기 )
scone
2022. 4. 26. 15:16
[개념]
- 두 개 이상의 수에서 공통된 약수를 공약수라고 한다. 그리고 그 중 가장 큰 값을 최대 공약수라고 한다.
- 사례) 12, 54, 72의 최대 공약수를 구해보자
2 | 12 | 54 | 72 |
3 | 6 | 27 | 36 |
2 | 9 | 12 |
다음과 같이 나누기 연산으로 최대 공약수를 구할 수 있습니다. ( 2*3 = 6 )
[실습 1] 두 개의 수를 입력하면 공약수와 최대 공약수를 출력하는 코드를 작성하자
# num1, num2 = map(int, (input().split()).sort()) 이렇게 하면 오류남
num1, num2 = map(int, sorted(input().split()))
max_num = 1
for n in range(2,num1+1):
if num1 % n == 0 and num2 % n == 0:
max_num = n
print(max_num)
코드해석
숫자 두개를 받아서 정렬한 뒤
: input().split() 하면 띄어쓰기를 기준으로 각 요소들이 리스트를 이룬다. 이를 sorted(리스트) 로 씌워 정렬한 것이다.
map으로 각 요소를 int로 캐스팅 하였다.
num1은 항상 더 작거나 같은 값이 되는데, n부터 num1까지의 값들로 num1과 num2를 동시에 나눠 공약수를 구하고
그 중 가장 큰 값을 최대 공약수로 구하였다.
주의
- 리스트.sort() 를 하면 리스트는 정렬되지만, 정작 리스트.sort()는 None을 반환하기 때문에 위와 같이 쓸 수 없다.
반면에 sorted( 리스트 ) 는 그 값 자체가 원래의 리스트를 복사하여 만든 정렬된 새 리스트 이므로 사용할 수 있는 것이다. - max_num 은 1로 초기화 하여야 한다. ( 공약수가 1부터 가능하기 때문에 )
[실습 2] 세 개의 수를 입력하여 최대 공약수 출력하기
num1, num2, num3 = map(int, sorted(input().split()))
max_num = 1
for n in range(2,num1+1):
if num1 % n == 0 and num2 % n == 0 and num3 % n == 0:
max_num = n
print(max_num)
'''
12 54 72
6
'''
코드해석
실습1과 설명이 같다.