728x90
문제
두 개의 자연수를 입력받아 최대공약수(GCD)와 최소공배수(LCM)를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000 이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소공배수를 출력한다.
예제 입력
24 18
예제 출력
6
72
#유클리드 호제법을 통한 접근법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
vals = list(map(int, input().split()))
def gcd(valA, valB):
if valA % valB == 0:
print(valB)
lcm(valB)
return valB
gcd(valB, valA%valB)
def lcm(gVal):
result = int(vals[0]/gVal) * int(vals[1]/gVal) * gVal
print(result)
gcd(vals[0], vals[1])
|
cs |
# 그냥 for문을 통한 접근법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vals = list(map(int, input().split()))
if vals[0] < vals[1]:
vals[0], vals[1] = vals[1], vals[0]
gcdVal = 0
lcmVal = 0
for i in range(1, vals[1]+1):
if vals[0] % i == 0 and vals[1] % i == 0:
gcdVal = i
lcmVal = int(vals[0]/gcdVal) * int(vals[1]/gcdVal) * gcdVal
print(gcdVal)
print(lcmVal)
|
cs |
반응형
'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글
rook (0) | 2021.05.11 |
---|---|
maxofarr (0) | 2021.05.10 |
상자 꾸미기 (0) | 2021.05.10 |
offset (0) | 2021.05.10 |
백준 - 스택 수열 #1874 (0) | 2021.03.30 |