본문 바로가기
Computer Science/PS

[PS] 120816. 피자 나눠 먹기(3)

by BrickSky 2023. 11. 9.

1) 문제: 120816. 피자 나눠 먹기(3)

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100

입출력 예 설명

slice n result
7 10 2
4 12 3

 

2) 나의 첫 풀이

n 나누기 slice를 할 때 나머지가 없으면 result 값에 몫을 두고

나머지가 생기면 나머지+1의 값을 몫에 넣는 방법으로 구현해야겠다고 생각했다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int slice, int n) {
    int answer = 0;
    if(2<=slice<=10 && 1<=n<=100){
        if(n/slice==0){
            answer = n/slice;
        }
        else if(n/slice != 0){
            answer = (n%slice+1);
        }
    }
    return answer;
}

틀렸다.

입력 값 7과 2가 있을 때 결과 값은 2가 나와야 하는데 나의 코드에 의하면 4가 나온다.

문제점을 찾아보자!

 

문제점 1

조건을 만족한 경우 if 문에 들어가는데, 이때 의미하는 것은 나누어떨어진다. 즉 나머지가 0이라는 것이다.
근데 코드를 작성할 때 나머지가 아닌 몫을 구하는 식을 작성해서 값이 틀리게 나온 것이었다.

if(n%slice==0){
answer = n/slice;
}

이렇게 고쳐주었다.

 

문제점 2

else if문도 나머지를 확인해야 하는데, 몫을 확인하는 식을 작성했다.

else if(n%slice != 0){
            answer = (n/slice+1);
        }

이렇게 고쳐주었다.

추가적으로 몫에 +1을 해주어야 하기에 % 부분을 /로 바꾸어주었다.

 

3) 수정한 풀이

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int slice, int n) {
    int answer = 0;
    if(2<=slice<=10 && 1<=n<=100){
        if(n%slice==0){
            answer = n/slice;
        }
        else if(n%slice != 0){
            answer = (n/slice+1);
        }
    }
    return answer;
}

완성!

 

4) 배운 점

이전에 비슷한 문제를 풀었던 기억이 있었다.
문제를 보고 바로 풀이를 떠오른 게 아니라 제한사항과 입출력 예제를 보고 머릿속으로 수식을 세웠던 것 같다.
한 번에 맞추진 못했지만, 나머지 연산과 몫 연산을 착각하면 안 된다는.. 실수?..를 두 번 다시 반복해선 안될 것 같다.