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) 배운 점
이전에 비슷한 문제를 풀었던 기억이 있었다.
문제를 보고 바로 풀이를 떠오른 게 아니라 제한사항과 입출력 예제를 보고 머릿속으로 수식을 세웠던 것 같다.
한 번에 맞추진 못했지만, 나머지 연산과 몫 연산을 착각하면 안 된다는.. 실수?..를 두 번 다시 반복해선 안될 것 같다.
'Computer Science > PS' 카테고리의 다른 글
[PS] 120889. 삼각형의 완성조건(1) (0) | 2023.11.11 |
---|---|
[PS] 120819. 아이스 아메리카노 (0) | 2023.11.10 |
[PS] 120585. 머쓱이보다 키 큰 사람 (0) | 2023.11.08 |
[PS] 120821. 배열 뒤집기 (1) | 2023.11.06 |
[PS] 120814. 피자 나눠 먹기(1) (0) | 2023.11.05 |