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

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

by 하모예 2024. 8. 29.

| 문제

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다.

피자를 나눠먹을 사람의 수 n이 주어질 때,

모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해 보세요.

| 제한 사항

1   n   100

| 입출력 예

n result
7 1
1 1
15 3

| 풀이 1

public int solution01(int n) {
    int answer = 0;
    if(n % 7 == 0){
        answer = n / 7;
    } else{
        answer = n/7 +1;
    }
    return answer;
}

 

| 풀이 2

public int solution02(int n) {
    int answer = n % 7 == 0 ? n/7 : n/7+1;
    return answer;
}

| 해설

주인공이 주어지고, 주인공이 일상에서 마주하는 문제를 해결하기 위한 알고리즘을 구성하는 문제예요.

소위 코딩 테스트라고 불리는 문제들은 이런 형태가 많은 것 같아요.

스토리를 보고 바로 사용되는 이론을 잘 떠올리는 분들도 있는 반면에

이론을 익하고, 학습한 이론을 코드에 녹여내는 데는 문제가 없지만

피자 나눠 먹기 문제처럼 스토리가 주어졌을 때 어디서부터 손대야 할지 모르겠다는 분들도 많더라고요.

그럴 때 저는 할 수 있는 것부터 차근차근 하라고 조언을 드려요.

 

처음 문제 화면을 열면 아래와 같은 코드가 구성되어 있는데요.

class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

코드를 보고 내가 출력하고자 하는 값을 일단 적어보는 거예요.

예를 들어서 매개변수로 주어지는 숫자가 15인 경우에 우리는 3판의 피자가 필요합니다. 

그러면 n은 15이고, answer는 3이 되겠죠.

제한 사항으로 n이 1부터 100이라고 했기 때문에 숫자 정보를 쭉 나열해 봅니다.

n(1~7) answer n(8~14) answer n(15~21) answer n(22~29) answer
1 1 8 2 15 3 22 4
2 1 9 2 16 3 23 4
3 1 10 2 17 3 24 4
4 1 11 2 18 3 25 4
5 1 12 2 19 3 26 4
6 1 13 2 20 3 27 4
7 1 14 2 21 3 29 4

나열된 숫자 정보를 바라보면 규칙을 하나 발견할 수 있어요. 

1~7 즉, 7에 1을 곱한 숫자까지는 1판의 피자가 필요하고,

8~14 즉, 7에 2를 곱한 숫자까지는 2판의 피자가 필요하다는 사실을 알 수 있죠.

다른 말로 이야기하면 주어진 매개변수 n을 피자 한판의 조각 개수 7로 나누었을 때

나머지가 있는 경우 +1, 나머지가 없는 경우 몫이 필요한 피자의 수가 되는 거예요.

 

사실 이렇게 설명해도 이해가 잘 안될수 있어요. 

이 정도 생각을 할 수 있기까지도 많은 시간이 걸리지요.

그러나 틀리더라도 꾸준히 도전하다 보면 언젠가는 문제만 보고 코드를 떠올리게 될 거예요.

포기하지 말고 마지막 문제까지 가봅시다!! 파이팅!!

댓글