반응형
문제
https://www.acmicpc.net/problem/1934
1934번: 최소공배수
두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있
www.acmicpc.net
풀이
최소공배수는 어떻게 구할 수 있을까요?
최소공배수는 두 수의 곱 / 최대공약수로 구할 수 있습니다.
그렇다면 최대공약수는 어떻게 구할 수 있을까요?
최대공약수는 소인수분해를 하여 공통된 소수를 찾아서 구할 수도 있겠지만,
유클리드 호제법을 사용하면 더 효율적으로 구현할 수 있습니다.
유클리드 호제법은 나머지를 구하는 연산을 통해 구현하는데,
간단하게 12와 30이 있다고 가정하면
- 30 % 12 = 6
- 12 % 6 = 0
최대공약수(6)를 구할 수 있습니다.
이제 12 * 30 / 6 == 60 최소공배수를 구할 수 있겠죠?
소스코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func gcd(_ a: Int, _ b: Int) -> Int { | |
if b == 0 { | |
return a | |
} | |
return gcd(b, a % b) | |
} | |
func solution() { | |
let input = readLine()!.split(separator: " ").map { Int($0)! } | |
let a = input[0], b = input[1] | |
print(a * b / gcd(a, b)) | |
} | |
let n = Int(readLine()!)! | |
for _ in 0..<n { solution() } |
후기
최소공배수 = 두 수의 곱 / 최대공약수 라는 식을 알고,
최대공약수를 구하는 방법을 안다면 쉽게 풀 수 있는 문제입니다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 1735 분수 합 (Swift) (0) | 2023.03.15 |
---|---|
[BOJ] 백준 13241 최소공배수 (Swift) (0) | 2023.03.15 |
[BOJ] 백준 11729 하노이 탑 이동 순서 (Swift) (0) | 2023.03.15 |
[BOJ] 백준 2447 별찍기 - 10 (Swift) (0) | 2023.03.15 |
[BOJ] 백준 24060 알고리즘 수업 - 병합 정렬 1 (Swift) (0) | 2023.03.14 |