머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
- 1 ≤ n ≤ 100
| n | result |
|---|---|
| 6 | 1 |
| 10 | 5 |
| 4 | 2 |
최대공약수와 최소공배수를 이용해 풀이하자
class Solution {
public int solution(int n) {
return lcm(n, 6) / 6;
}
private int gcd(int a, int b) {
while (b != 0) {
int temp = a;
a = b;
b = temp % b;
}
return a;
}
private int lcm(int a, int b) {
return a * (b / gcd(a, b));
}
}모두가 같은 수의 피자 조각을 먹어야 하므로, 사람의 수n과 피자 조각 수6조각 두 수의 최소 공배수를 구한 후 피자 조각 수에 해당하는 6으로 나머지 연산을 수행하면 모두가 동일한 조각을 섭취 가능한 최소 피자 판수를 구할 수 있다.
먼저 두 수의 최소 공배수를 구하기 위해 먼저 두 수의 최대 공약수를 구해야한다.
메소드gcd(a, b)에서 두 수에 대해 나머지 연산자를 수행했을 때 결과가 0이 나올때까지 연산을 반복수행하여 최소 공배수를 추출한다.
그 다음 최소 공약수를 사용해 최대 공배수를 구한다. 메소드lcm(a, b)에서 사람의 수a 피자 조각 수6을 매개변수로 받아 와서 메소드 내 해당 연산식을 수행한다. a * b / gcd(a, b)로 작성해도 무관하다.
메소드lcm()에서 추출된 최소 공배수를 피자 조각 수6으로 나머지 연산을 수행하면 모든 사람이 동일한 피자 조각을 섭취할 수 있는 최소 피자 판 수를 구할 수 있다.
💡 무한 루프 내에서 피자 판 수
answer를 1씩 증가 시키며 해당 연산의 결과값이 0이 될 때까지 연산을 반복 수행한다.
class Solution {
public int solution(int n) {
int answer = 1;
while(true){
if(6*answer%n==0) break;
answer++;
}
return answer;
}
}