머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ n ≤ 100
입출력 예
n result 6 1 10 5 4 2
import Foundation
func solution(_ n:Int) -> Int {
var pizza = 0
for i in 1...100 {
if (i * 6) % n == 0 {
pizza = i
break
}
}
return pizza
}
빨리 풀고 싶어서 그냥 반복문을 사용해 1부터 100까지 순회하며 확인하는 방식으로 작성했기 때문에 효율이 떨어진다.....
(i * 6) % n == 0
조건은 사실상 최소 공배수를 찾는 과정이므로 이를 직접 계산하는 방식으로 단순화할 수 있었다.최소 공배수를 직접 계산하는 방식으로 수정해볼 수 있었다.
import Foundation
func solution(_ n:Int) -> Int {
func gcd(_ a: Int, _ b: Int) -> Int {
return b == 0 ? a : gcd(b, a % b)
}
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}
return lcm(6, n) / 6
}
최대 공약수(GCD)
func gcd(_ a: Int, _ b: Int) -> Int {
return b == 0 ? a : gcd(b, a % b)
}
최소 공배수(LCM)
func lcm(_ a: Int, _ b: Int) -> Int {
return a * b / gcd(a, b)
}