Repository files navigation
아래 요구사항들을 만족하는 멀티스레드 프로그램 Supermarket.java 을 구현한다.
Supermarket.java 는 app/src/main/java/supermarket 디렉토리에 있다.
Supermarket.java
n명의 계산원이 손님들 customers을 응대하는 메서드 serveCustomer(int[] customers, int n)를 구현한다.
customers의 각 int 원소는 손님 1명을 의미하며, 값은 처리해야하는 물품의 갯수이다.
손님들은 FIFO (First-In-First-Out) 구조의 큐(Queue)를 이용하여 순차적으로 응대된다.
계산원은 Cashier 클래스로 모델링되며 n명의 계산원이 존재한다.
손님을 응대하고 있지 않은 계산원이 큐에서 손님을 1명씩 응대하여 물품을 처리하며, 이 행위는 CashierTask라는 스레드 클래스로 모델링한다.
serveCustomer()에는 밀리초 단위로 시간을 측정하는 로직이 구현되어 있으며, n명의 계산원이 주어진 손님들을 동시에 응대할때 소요되는 시간을 계산한다.
변수, 배열 초기화 등의 로직을 제외하고 계산원이 손님을 응대하는 작업에 대해서만 구현한 코드가 시간 측정란에 있어야함에 유의한다.
serveCustomer()는 측정된 밀리초 시간에 100을 나눈 후 리턴한다.
계산원이 물품을 1개 처리할 때의 소요 시간은 100ms로 가정한다.
예를 들어,
customers = {5, 3, 4}, n = 1 일 때, 총 1200ms가 걸리고 12를 리턴한다.(계산원 1명이 모든 손님들의 물품을 처리해야 하므로)
customers = {10, 2, 3, 3}, n = 2 일 때, 총 1000ms가 걸리고 10을 리턴한다.(첫번째 계산원이 10개를 처리하는 동안 두번째 계산원이 나머지를 모두 응대)
customers = {2, 3, 10}, n = 2 일 때, 총 1200m가 걸리고 12를 리턴한다.(첫번째 계산원이 2, 10 처리, 두번째 계산원이 3 처리)
CashierTask에서 물풀 처리 시 실제 소요시간을 발생시키기 위해 Thread.sleep(int milliseconds) 메서드를 이용한다.
로컬(또는 Codespaces)에서 여러번 테스트 후 GitHub에 제출하길 바랍니다.
무한 루프, 다수 스레드 생성 등 원격 머신의 자원을 많이 잡아먹는 코드 제출은 금지합니다.
Queue는 직접 구현하거나(스켈레톤 코드 사용) 또는 컬렉션 프레임워크의 Queue를 사용할 수 있습니다.
Thread 클래스 또는 Runnable 클래스만 사용하여 구현합니다.(Java에서 지원하는 멀티스레딩 프레임워크 사용금지)
스레드를 안쓰고 구현 시 0점입니다.
app/test/java/supermarket/SupermarketTest.java에는 다양한 JUnit 테스트 메서드가 정의되어 있습니다.
gradle clean test 명령어를 실행 시 app/test/java/supermarket/SupermarketTest.java 에 있는 모든 JUnit 테스트 케이스를 실행합니다.
만약 특정 테스트 케이스만 실행하고 싶은 경우 gradle clean test --tests 'SupermarketTest.testSimple1' 와 같이 특정 테스트 메서드를 지정합니다.
git 명령어를 이용해서 로컬 저장소로 push 하거나, GitHub 저장소에서 직접 편집하여 제출할 수도 있습니다.
코드에 주석을 간략히 달아서 어떻게 문제를 해결했는지 설명합니다.
About
4-supermarket-HOJUN99 created by GitHub Classroom
Resources
Stars
Watchers
Forks
You can’t perform that action at this time.