본문 바로가기
개발/개발 공부

[프로그래머스] 코딩테스트 입문 : 피자 나눠 먹기(3)

by 하모예 2024. 8. 29.

| 문제

머쓱이네 피자 가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다.

피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때,

n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를

return 하도록 solution 함수를 완성해 보세요.

| 제한 사항

2 ≤  n ≤  10

1 ≤  n ≤  100

| 입출력 예

slice n result
7 10 2
4 12 3

| 풀이 1

public int solution01(int slice, int n) {
    int answer = 1;
    while(slice * answer < n){
        answer++;
    }
    return answer;
}

| 풀이 2

public int solution(int slice,int n) {
    return n % slice > 0 ? n / slice +1 : n / slice;
}

| 해설

똑같은 피자 나눠 먹기지만, 3번 문제는 최소 공배수, 최대 공약수와 아무 관련이 없습니다.

같은 스토리로 이렇게 다양한 문제를 낼 수 있다니 코딩은 정말 재밌어요.

피자 한판을 몇 조각으로 나눌 수 있는지, 몇 명의 사람이 피자를 먹으려고 하는지를 가지고

최소 몇 판의 피자가 있어야 모든 사람이 한 조각 이상의 피자를 먹을 수 있는지 살펴보죠.

 

만일 10명의 사람이 있고 피자 한판에 7조각으로 나눈다면 적어도 2판은 필요합니다.

왜냐면 10개 이상의 피자 조각이 있어야 적어도 한 조각씩 먹을 수 있기 때문이죠.

두 번째, 사람이 12명이고 피자 한판에 4조각으로 쪼갠다면 적어도 3판이 있어야 해요.

왜? 12조각은 있어야 하니깐요.

다시 말하면 피자 한판당 조각수 곱하기 피자 개수가

인원수보다 크거나 같아지는 만큼의 피자가 필요하다는 이야기가 됩니다.

그래서, slice * answer < n이면 answer를 계속 추가하는 방향의 로직이 만들어집니다.

 

반대로 좌항의 곱하기는 우항으로 가면 나누기로 처리할 수 있는 거 아시죠?

사람수(n)를 한판 조각(slice)으로 나눈 값을 가지고 피자가 몇 판인지도 파악할 수 있습니다.

n % slice의 나머지가 0이면 n/slice만큼의 피자가 필요하고

n% slice를 했을 때 나머지가 0보다 크다면 피자가 한판 더 필요하지요.

댓글