코딩테스트

[프로그래머스] 피자 나눠 먹기 (2)

john-lennon 2026. 4. 5. 18:05

문제 설명

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

 

제한사항

1 ≤ n ≤ 100

 

입출력 예

n result
6 1
10 5
4 2

 


 

나의 코드

function solution(n) {
    for (let i = 1; ; i++) {
        if ((i * 6) % n === 0) {
            return i;
        }
    }
}

 

풀이

1. 피자는 한 판에 6조각
2. 모든 사람이 같은 수의 조각을 먹고, 남는 조각이 없어야 한다.
3. 따라서 전체 조각 수는 사람 수 n으로 나누어떨어져야 한다.

→ 6의 배수(전체 조각 수)를 하나씩 늘려가면서 n으로 나누어떨어지는 순간을 찾기

 

ex)

n = 10명
1. 30조각이있어야함 (최소) 그래야 3조각씩 먹을 수 있음
2. 30조각 = 5판

1. 6의 배수를 계속 돌림
2. 언제까지? 10명이 나눠떨어질때까지... (나머지가 0일때)
3. 30이라는 값이 나왔어 거기에 나누기 6을 하면 피자의 판이 나옴 


case 1. 다른 사람의 코드

const solution = (n) => {
    let piece = 6

    while(true) {
        if (piece % n === 0) {
            break
        }
        piece += 6
    }

    return piece / 6
}

 

차이점

나는 판 수를 증가시키고 저 코드는 조각 수를 증가시킴

(별반 차이 없음)

 

 

case 2. 다른 사람의 코드

function solution(n) {
    let pizza = 1;
    while (pizza * 6 % n) {
        pizza++;
    }
    return pizza;
}

 

차이점

나는 for문 안에서 if문 사용해 조건을 만족하면 return하는 구조

이 코드는 while 문의 조건 자체에 식을 넣어서 조건이 만족될 때까지 반복하도록 구조

 


 

느낀점

문제의 핵심 개념을 먼저 파악하는 게 1순위 그리고 그 다음이 어떻게 하면 효율적인 방식으로 풀 수 있는지에 대한 선택지가 좀 전보다 넓어진 거 같다...