300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리눅스
- 백준
- AI
- 킥스타트
- 순열
- 코딩
- 딥러닝
- 프로그래머스
- 그래프
- 코딩테스트
- 프로그래밍
- 파이썬
- BFS
- google coding competition
- nlp
- 코딩 테스트
- PYTHON
- 네트워크
- dp
- CSS
- 운영체제
- 동적프로그래밍
- DFS
- 브루트포스
- OS
- 동적 프로그래밍
- 구글 킥스타트
- 알고리즘
- kick start
- linux
Archives
- Today
- Total
오뚝이개발자
[백준1934] 최소공배수 본문
728x90
300x250
문제
https://www.acmicpc.net/problem/1934
1934번: 최소공배수
두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다. 두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
방법1) 유클리드 호제법을 이용하여 gcd를 구한 뒤 lcm = A*B//gcd를 이용
방법2) 마찬가지로 유클리드 호제법을 이용해 gcd를 구하지만 lcm = gcd * (a//gcd) * (b//gcd)를 이용
코드
방법1) lcm = A*B//gcd 이용
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
#기존의 값을 복사해둠
x = a
y = b
# a, b 중 뭐가 큰지 나누지 않아도 노상관
# Ex) gcd(18,24)=gcd(24,18)처럼 되므로
while b != 0:
r = a % b
a = b
b = r
gcd = a
lcd = x * y // a
print(lcd)
방법2) lcm = gcd * (a//gcd) * (b//gcd) 이용
def gcd(a,b):
if a==0:
return b
elif b==0:
return a
if a>b:
a %= b
return gcd(a,b)
else:
b %= a
return gcd(a,b)
if __name__ == '__main__':
trial = int(input())
for i in range(trial):
a, b = map(int, input().split())
result = gcd(a,b)
result *= (a//result) * (b//result)
print(result)
728x90
300x250
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준1476] 날짜 계산 (0) | 2020.03.05 |
---|---|
[백준2309] 일곱 난쟁이 (0) | 2020.03.05 |
[백준6588] 골드바흐의 추측 (0) | 2020.03.04 |
[백준9613] GCD 합 (0) | 2020.03.04 |
[백준2609] 최대공약수와 최소공배수 (0) | 2020.03.03 |
Comments