<문제 제시>
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
<예시 입출력>
<문제 해결 과정>
피자 나눠 먹기(1)에서 바뀐 점은 피자 한 판이 6조각으로 나뉜다는 점과
주문한 피자를 모두 남기지 않고 먹어야한다는 것,
모두 같은 수의 피자를 먹어야한다는 것이다.
최소한 필요한 피자 판 수가 더 증가될 것 같았다.
만약 사람이 10명인 경우로 가정했을 때
// 10명일때는 한 판 = 6명만 먹고 4명 굶음
// 두 판 = 10명 다 먹지만 2명이 더 먹음
// 세 판 = 10명 다 먹지만 2명이 덜 먹음
// 네 판 = 10명 다 먹지만 4명만 더 먹음
// 5 판 = 10명 다 먹음 (3조각씩)
이 과정을 통해 하나의 규칙을 찾았는데, 사람의 수 n과 피자 조각 6의 최소 공배수일때 성립한다는 것이다.
따라서 n * 6을 최소 공배수로 나누었다.
solution 함수 말고도 최소공배수(GCD)를 구하는 함수도 만들어 진행하였다.
public static int gcd(int a, int b) {
if(b == 0) return a;
else return gcd(b, a%b);
}
<전체코드>
// #. 피자 나눠 먹기(2)
public class divide_pizza2 {
// 피자 한 판에 6조각
public static int solution(int n) {
int answer = 0;
answer = n * 6 / gcd(n, 6);
return answer / 6;
}
public static int gcd(int a, int b) {
if(b == 0) return a;
else return gcd(b, a%b);
}
}
최소 공배수를 구하는 방법을 처음 접했는데, 재귀함수로 계속해서 식을 진행해 나간다는 점이었다.
gcd(n, 6)을 통해 최소공배수를 도출하기까지 재귀함수가 호출되고, 다 구해지면, return한다는 것이다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120815
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '직각삼각형 출력하기' - Java (0) | 2023.02.22 |
---|---|
[프로그래머스] '피자 나눠 먹기 (3)' - Java (0) | 2022.12.20 |
[프로그래머스] '피자 나눠 먹기 (1)' - Java (0) | 2022.12.19 |
[프로그래머스] '배열의 평균값' - Java (0) | 2022.12.19 |
[프로그래머스] '두 수의 나눗셈' - Java (0) | 2022.12.18 |