Blog

[Algorithm]10 원하는 피자 등분, 입력한 인원에 따른 필요한 피자판 수를 구하는 계산기 만들기2

Author
Summary
2개 이상 변수 이용
Category
Study
Tags
Algorithm
Favorite
Memory Date
2023/08/02
Progress Status
Done
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
5 more properties
이번 부분에서는 저번 문제와 비슷하지만 피자를 몇등분으로 나눌지 물어보는 것이 추가된다. 겉으로 보기엔 복잡해보여도, 비지니스 로직을 먼저 생각해서 그에 대한 메서드를 구성하고, 예시를 통해서 규칙을 찾아내는 것이 쉽게 접근하는 방법이었다.

1. Main.java

이제 Main 부분은 객체 생성 호출 이외엔 남는게 없다.
package Algorithm08; import Algorithm08.Solution; public class Main { public static void main(String[] args) { Solution solution = new Solution(); solution.inputPizzaCutAsk(); } }
Java
복사
2. Solution.java
연산 부분을 천천히 생각하면서 풀어냈다. 특히 1판에서 2판으로 변하는 부분이 포인트이므로 규칙을 찾아내야 한다.
문제를 쳐다만 보고 있으면 햇갈릴 수 있다. 우선 비지니스 로직을 생각하고 메서드부터 구분 지었다. 실제로 내가 구해야 되는(연산) 부분만 구분하기 위해서 이 같은 코딩 방법이 보기 편한 것 같다.
우선 종업원과 손님의 입장으로 생각한다.
1. 피자를 몇등분 묻고(인풋요청) -> 손님은 답한다(인풋1)
2. 사람은 몇명인지 묻고(인풋요청) -> 손님은 답한다(인풋2)
3. 종업원은 필요한 피자 판수를 계산한다(연산로직)
4. 종업원은 인원 전원이 1조각 이상 먹을 수 있는 판수를 얘기해준다(아웃풋)
package Algorithm08; import java.util.Scanner; public class Solution { /*문제 설명 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. pizza 1 -> piece 2~10 피자 조각 수 slice(piece)와 piece -> how many slices do you want to cut it. inputPizzaCutAsk(){} 피자를 먹는 사람의 수 n이 memberNum , how many people? inputMemberAsk(){} 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 memberNum 최소 몇 판의 피자를 시켜야 하는지 orderPizzaNum 를 return 하도록 solution 함수를 완성해보세요. 비지니스 로직정리 피자를 몇등분 해드릴까요? -> 몇명이서 드시나요? -> 그럼 몇판 시키셔야 합니다. 제한사항 2 ≤ slice ≤ 10 1 ≤ n ≤ 100*/ double pizzaNum; int pieceNum; int memberNum; Scanner sc = new Scanner(System.in); public Solution() { } void inputPizzaCutAsk() { System.out.println("피자를 몇등분 해드릴까요?"); pieceNum = sc.nextInt(); while (true) { if (pieceNum > 2 && pieceNum > 10) { System.out.println("피자는 2~10조각까지만 커팅해드릴 수 있어요."); continue; } break; } inputMemberAsk(); calculate(pieceNum, memberNum); } void inputMemberAsk() { System.out.println("몇명이서 드실건가요?"); memberNum = sc.nextInt(); while (true) { if (memberNum < 1 && memberNum > 100) { System.out.println("인원은 1~100명으로만 입력해주세요."); continue; } break; } } void calculate(int pieceNum, int memberNum) { // 5조각을 해주세요, 3명입니다. == 피자 1개로 가능 // 5*1 > 3 // piece*pizza >member // member/piece < pizza // 3/5(==0.6) => 1 // 5조각을 해주세요, 6명입니다. == 피자 2개 필요 // 6/5(==1.2) => 2 // 9조각을 해주세요 14명입니다. // 14/9 == 1.55.. 올림 =>2 pizzaNum = Math.ceil((double)memberNum/pieceNum); //member는 int니 double형변환 outputOrder((int)pizzaNum);//pizzaNum은 double이니 int로 형변환 } void outputOrder(int pizzaNum) { System.out.printf("%d명이 드시려면 %d판을 시키셔야 합니다.", memberNum, pizzaNum); } }
Java
복사