Home 피자 나눠 먹기 (2)
Post
취소

피자 나눠 먹기 (2)

🔖 피자 나눠 먹기 (2)

📌 문제

문제 설명

머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.


제한사항

1 ≤ n ≤ 100


입출력 예
nresult
61
105
42

입출력 예 설명

입출력 예 #1

  • 6명이 모두 같은 양을 먹기 위해 한 판을 시켜야 피자가 6조각으로 모두 한 조각씩 먹을 수 있습니다.

입출력 예 #2

  • 10명이 모두 같은 양을 먹기 위해 최소 5판을 시켜야 피자가 30조각으로 모두 세 조각씩 먹을 수 있습니다.

입출력 예 #3

  • 4명이 모두 같은 양을 먹기 위해 최소 2판을 시키면 피자가 12조각으로 모두 세 조각씩 먹을 수 있습니다.

✏️ 풀이

1
2
3
4
5
6
7
8
9
10
function solution(n) {
    var answer = 0;
    let lcm = 1;

    while ((lcm % n !== 0 || lcm % 6 !== 0) && lcm < n * 6)
      lcm += 1;
    
    answer = lcm / 6;
    return answer;
}

피자를 여섯 조각으로 잘라 주는데, 피자를 나눠 먹는 수 n이 모두 같은 수로 먹어야 하므로 나는 여기서 최소 공배수를 생각하였다.

일단 최소공배수를 선언한 변수에 1을 지정해 놓고, 조건이 있으므로 조건이 있는 반복문인 while문을 사용하였다.

while문의 조건은 최소공배수를 사람에 나누었을때 나머지가 0이 아니거나, 최소공배수를 6으로 나누었을때 0이 아니여야한다. 그리고 최소공배수는 사람의 수*6보단 작아야된다. 조건에 맞으면 최소공배수에 1을 더해준다.

최소공배수가 사람의 수와 같아지고, 최소공배수를 6으로 나누었을때, 0이 된다면 모두 공평하게 피자를 나누어 먹는다.

사람의 수가 6명일때는 6까지 반복하여 최소공배수 변수 lcm 에 최종적으로 6이 할당되고 결과값은 피자 조각이 아닌 판수로 계산하므로, 피자 한판의 조각 개수인 6으로 나누어 return한다.

사람의 수가 10명이면 lcm에는 30까지 반복이 된다.

🔍 다른 사람 풀이

1
2
3
4
5
6
7
8
9
10
// 다른 사람 풀이
function solution(n) {
    let pizzaBox = 6
    
    while(pizzaBox%n !== 0) {
        pizzaBox+=6
    } 
  
    return pizzaBox/6
}

다른 사람 풀이는 피자 한판에 여섯조각이므로 변수를 선언하여 6을 할당하였다. 후에 6을 사람의 수만큼 나누었을때, 0이 아니면 피자 한판을 더 추가한다. 결과값에는 피자조각이 아닌 피자 판수를 원하므로 다시 6으로 나누어 반환한다.

내가 쓴 풀이는 수행하는 반복문도 많고, 검사해야할 조건도 많았지만, 다른사람의 풀이에서는 while에서 하나의 조건으로 반복을 한다. 코드가독성이 훨씬 좋아 보이고 수행해야하는 코드의 수도 많이 줄어든 차이가 있는 것 같다.

💻 출력 결과

image-20221121220151091

This post is licensed under CC BY 4.0 by the author.