[CodingTest] 피자 나눠 먹기 (1)

hye·2023년 3월 8일
0

AlgorithmTest

목록 보기
39/95

📖 Exam

문제 설명

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

제한 조건

  • 1 ≤ n ≤ 100

입출력 예

nresult
71
11
153
  • 입출력 예 #1
    7명이 최소 한 조각씩 먹기 위해서 최소 1판이 필요합니다.

  • 입출력 예 #2
    1명은 최소 한 조각을 먹기 위해 1판이 필요합니다.

  • 입출력 예 #3
    15명이 최소 한 조각씩 먹기 위해서 최소 3판이 필요합니다.


✍ Answer

class Solution {
    public int solution(int n) {
        return n%7==0 ? n/7 : n/7 + 1;
    }
}

💡 Realization

  • 순간 int형을 double형으로 바꿔서 풀어야하나 했다가 나머지를 판별할 조건문만 만들면 된다는걸 깨달았다.

숫자에 강하다

class Solution {
    public int solution(int n) {
        return (n + 6) / 7;
    }
}

정수론 잘하실 듯.. 6은 '어떤 수를 7로 나누면 나머지가 0부터 6까지만' 있어서 들어간 숫자예요.

주어진 피자를 일곱 조각으로 나누는 경우, 한 사람당 최소한 한 조각의 피자를 먹으려면 n명으로 나눈 뒤, 올림한 값이 필요한 피자의 수입니다. 하지만, 올림을 계산하는 대신, 위의 코드에서는 (n + 6) / 7 식을 사용하여 필요한 피자의 수를 계산합니다.

이 식은 다음과 같이 유도될 수 있습니다. 예를 들어, n = 15인 경우를 살펴보겠습니다. 이 경우, 15명의 사람이 피자를 먹기 위해서는 ceil(15/7) = 3 조각의 피자가 필요합니다. 이를 (n + 6) / 7 식으로 계산해보면 (15 + 6) / 7 = 2.1428... 입니다. 따라서, 이 값의 올림인 3이 필요한 피자의 수와 일치합니다.

이 식이 유용한 이유는, ceil() 함수를 사용하지 않아도 되기 때문입니다. ceil() 함수를 호출하는 것은 성능에 악영향을 줄 수 있으므로, 이러한 간단한 수학식을 사용하여 더 효율적으로 문제를 해결할 수 있습니다.

Math.ceil()

import java.lang.Math;

class Solution {
    public int solution(int n) {
        return (int) Math.ceil(n/7.0);
    }
}

Java에서도 Math.ceil() 함수를 사용하여 숫자를 올림할 수 있습니다. 주의해야 할 점은, Python과 달리 Java에서 정수 나눗셈은 결과가 정수로 반환되기 때문에, n을 7.0으로 나누어야 합니다. 또한 Math.ceil() 함수의 결과는 double 형식이므로, int로 형변환하여 반환합니다.

참고사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120814/solution_groups?language=java

profile
Junior Backend Developer

0개의 댓글