1) 문제: 120814. 피자 나눠 먹기(1)
머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.
제한사항
- 1 ≤ n ≤ 100
입출력 예 설명
입출력 예 #1
- 7명이 최소 한 조각씩 먹기 위해서 최소 1판이 필요합니다.
입출력 예 #2
- 1명은 최소 한 조각을 먹기 위해 1판이 필요합니다.
입출력 예 #3
- 15명이 최소 한 조각씩 먹기 위해서 최소 3판이 필요합니다.
2) 나의 첫 풀이
1명일 때 ~ 7명일 때: 1판
8명일 때 ~ 14명일 때: 2판
15명일 때 ~ 21명일 때: 3판
→ 이렇게 보면 7로 나누었을 때 나머지가 없는 경우…?로 풀 수도 있지만 왠지 코드가 길어질 것 같다.
근데! n이 100보다 작은 경우니까 또 크게 상관없을 것 같기도 하고…
몫이 0~1인 경우 1판
≤2인 경우 2판
≤3인 경우 3판… 이런 식으로 풀어보자.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
if(1<=n<=100){
if(0<=n/7<=1){
answer = 1;
}
else if(n/7<=2){
answer = 2;
}
else if(n/7<=3){
answer = 3;
}
}
return answer;
}
이 풀이는 아닌 것 같다.. 이렇게 쉬운 문제를 길게 풀어서는 안 된다.
3) 수정한 풀이
나머지 없이 나눠 떨어지는 경우 해당 연산의 몫을 피자 개수로 정하고,
그렇지 않은 경우에는 연산 결과에 1을 더하는 방식을 떠올렸다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
if(1<=n<=100){
if(n%7 == 0){
answer = n/7;
}
else if(n%7 != 0){
answer = n/7 + 1;
}
return answer;
}
이렇게 해도! 문제가 풀리지 않았다…
4) 한번 더 수정한 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
if (1 <= n && n <= 100) {
if (n % 7 == 0) {
answer = n / 7;
} else if (n % 7 != 0) {
answer = n / 7 + 1;
}
return answer;
}
}
찾았다.
return answer; 이후 괄호가 하나밖에 없다. 이는 if문의 괄호이지 전체 연산의 괄호가 아니었다..
5) 배운 점
쉽게 쉽게 생각하자.
이번 문제를 풀으며 몫을 활용하는 아이디어를 활용한다고 나머지를 신경 쓰지 않았고, 나머지를 활용한다고 몫을 신경 쓰지 않았다. 문제를 풀기 위해 전체를 보는 시야를 갖는 게 중요할 것 같다.
또,,, 괄호 잘 신경 쓰기…
'Computer Science > PS' 카테고리의 다른 글
[PS] 120585. 머쓱이보다 키 큰 사람 (0) | 2023.11.08 |
---|---|
[PS] 120821. 배열 뒤집기 (1) | 2023.11.06 |
[PS] 120898. 편지 (0) | 2023.11.05 |
[PS] 120830. 양꼬치 (0) | 2023.11.04 |
[PS] 120817. 배열의 평균값 (1) | 2023.11.03 |