피자 가게의 주문과 요리 시간을 계산하는 프로그램
<조건>
각 피자별로 오븐 존재
<입력>
피자 번호 | 피자 이름 | 요리 시간 (0 입력 시 종료)
0
주문 번호 | 주문 시간 | 주문 피자 번호 (0 입력 시 종료)
0
<출력>
=== 메뉴판 ===
주문 메뉴 (요리시간)
주문 리스트 | 주문시간 | 요리시작 | 서빙시간
=== 오븐 요리 현황 ===
피자 이름 (요리시간)
[주문번호] 주문시간 | 요리 시작시간 ~ 서빙시간 | (대기시간)
완료 개수 (평균 대기 시간) [가동률]
<코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | import java.util.Scanner; import java.util.ArrayList; public class PizzaDemo { static ArrayList<Oven> ovenArr = new ArrayList<Oven>(); ArrayList<Order> orderArr = new ArrayList<Order>(); static double allTime = 1.0; public static void main(String[] args) { Scanner scan = new Scanner(System.in); PizzaDemo demo = new PizzaDemo(); demo.doitMenu(scan); demo.doitOrder(scan); demo.doitCompute(); demo.print(); } void doitMenu(Scanner scan) { Oven oven; int num = 0; while (true) { if ((num = scan.nextInt()) == 0) { break; } oven = new Oven(num); oven.input(scan); ovenArr.add(oven); } } void doitOrder(Scanner scan) { int num = 0; Order order; while (true) { if ((num = scan.nextInt()) == 0) { break; } order = new Order(num); order.input(scan); orderArr.add(order); ovenArr.get(order.cookingNum - 1).orderAdd(order); ovenArr.get(order.cookingNum - 1).waitingTime(); } } void doitCompute() { for (Oven i : ovenArr) i.orderCompute(); for (Order i: orderArr) { if (allTime < i.endCooking) { allTime = i.endCooking; } } } void print() { printMenu(); printOrderList(); System.out.println("\n\n====== 오븐 요리 현황 ====="); for (int i = 0; i < ovenArr.size(); i++) ovenArr.get(i).print(allTime); } void printMenu() { System.out.println("====== 메뉴판 ======"); for (int i = 0; i < ovenArr.size(); i++) System.out.printf("%-10s(요리시간 %d분)\n", ovenArr.get(i).menuName, ovenArr.get(i).cookingTime); } void printOrderList() { Order order; System.out.printf("\n%10s%10s%8s%5s\n", "주문리스트", "주문", "요리시작", "서빙"); for (int i = 0; i < orderArr.size(); i++) { order = orderArr.get(i); System.out.printf("[%2d] %-10s%2d분 - %2d분 - %2d분\n", order.orderNum, order.menuName, order.orderTime, order.startCooking, order.endCooking); } } } class Oven { ArrayList<Order> orderArr = new ArrayList<Order>(); int cookingNum = 0; String menuName = null; int cookingTime = 0; int waitingTime = 0; Oven(int num) { cookingNum = num; } void input(Scanner scan) { menuName = scan.next(); cookingTime = scan.nextInt(); } void orderAdd(Order order) { orderArr.add(order); order.menuName = this.menuName; } void waitingTime() { waitingTime += cookingTime; } void orderCompute() { if (orderArr.size() < 2) { return; } int prevEndCooking = orderArr.get(orderArr.size() - 2).endCooking; int startCooking = orderArr.get(orderArr.size() - 1).startCooking; if (prevEndCooking <= startCooking) { return; } orderArr.get(orderArr.size() - 1).startCooking = prevEndCooking; orderArr.get(orderArr.size() - 1).endCooking = prevEndCooking + cookingTime; waitingTime += prevEndCooking - startCooking; } void print(double allTime) { System.out.printf("%-10s(요리시간 %d분)\n", menuName, cookingTime); for (int i = 0; i < orderArr.size(); i++) { orderArr.get(i).print(cookingTime); } System.out.printf("%d개 완료 (평균 %.1f분 대기) [가동률 %.1f%%]\n\n", orderArr.size(), (double)waitingTime/orderArr.size(), cookingTime * orderArr.size() / allTime * 100); } } class Order { int orderNum = 0; int orderTime = 0; int cookingNum = 0; int startCooking = 0; int endCooking = 0; String menuName = null; Order(int num) { orderNum = num; } void input(Scanner scan) { startCooking = orderTime = scan.nextInt(); cookingNum = scan.nextInt(); endCooking = startCooking + PizzaDemo.ovenArr.get(cookingNum - 1).cookingTime; } void print(int cookingTime) { System.out.printf("[%2d]%-5d분 주문 %d ~ %d (%-2d분 대기)\n", orderNum, orderTime, startCooking, endCooking, (startCooking - orderTime) + cookingTime); } } | cs |
<실행 결과>
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 계단오르기 프로그램 (0) | 2018.09.27 |
---|---|
[Java] Math.abs() 함수 (0) | 2018.09.19 |
[Java] 묵시적. 명시적 형 변환 (0) | 2018.09.18 |
[수치계산] 근접한 정수 구하기 (0) | 2018.09.17 |
[수치계산] 학생 점수 프로그램 (0) | 2018.09.13 |