Restaurant Queue Sim
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
題目說明
請撰寫一個程式,模擬並管理一個動態變化的餐廳排隊名單。
給定一系列的字串指令,請根據指令對排隊名單進行對應的操作。排隊名單初始為空,且客人名字皆為不包含空白的唯一字串。
指令的處理規則
1. ADD <名字>
一般客人加入排隊,請將該名字加入隊伍的最尾端。
2. VIP <名字>
VIP 客人享有特權,請將該名字直接安插到隊伍的最前端(第一位),原本在排隊的客人順序依次向後退。
3. LEAVE <名字>
某位客人放棄排隊,請從隊伍中尋找並移除這位客人,其後方的客人順序依次向前遞補。題目保證該名字一定存在於當前的隊伍中。
4. SERVE
餐廳帶位入座,請移除隊伍中第一位的客人,並印出帶位訊息。若當前隊伍為空,則需印出警告訊息。
5. CLOSE
餐廳準備打烊,停止接收任何指令,並印出最終留在隊伍中的名單與總人數。
輸入格式
輸入包含多行字串,每行代表一個指令。
指令的格式可能為以下五種之一:
ADD <name>
VIP <name>
LEAVE <name>
SERVE
CLOSE
其中 <name> 為僅包含英文字母的字串。
輸入資料保證最後一行的指令必然為 CLOSE,且在遇到 CLOSE 之後不再處理後續輸入。
輸出格式
對於每個 SERVE 指令:
- 若隊伍中有客人,請輸出一行:
Serving: <name>(<name>為被移除的排頭客人名字)。 - 若隊伍為空,請輸出一行:
Queue is empty!。
對於 CLOSE 指令,請輸出兩行作為結算:
- 第一行輸出最終排隊名單,格式為:
[<name1>, <name2>, ...](若為空則輸出[])。 - 第二行輸出剩餘人數,格式為:
<count>。
可使用 Scanner 搭配 hasNextLine() 持續讀取輸入指令。
測試資料 (1)
輸入
ADD Alice
ADD Bob
VIP Charlie
ADD David
LEAVE Bob
SERVE
VIP Eve
SERVE
CLOSE
輸出
Serving: Charlie
Serving: Eve
[Alice, David]
2
解釋
以依序執行的指令為例,隊伍(ArrayList)的狀態變化如下:
- ADD Alice:Alice 排入尾端,隊伍為
[Alice] - ADD Bob:Bob 排入尾端,隊伍為
[Alice, Bob] - VIP Charlie:Charlie 插隊到最前方,隊伍變成
[Charlie, Alice, Bob] - ADD David:David 排入尾端,隊伍變成
[Charlie, Alice, Bob, David] - LEAVE Bob:Bob 離開隊伍,David 往前遞補,隊伍變成
[Charlie, Alice, David] - SERVE:服務排頭的 Charlie,輸出
Serving: Charlie,隊伍剩下[Alice, David] - VIP Eve:Eve 插隊到最前方,隊伍變成
[Eve, Alice, David] - SERVE:服務排頭的 Eve,輸出
Serving: Eve,隊伍剩下[Alice, David] - CLOSE:停止接收指令,輸出最終隊伍狀態
[Alice, David]以及剩下人數2。
參考程式碼框架
import java.util.*;
public class dd {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in, "UTF-8");
ArrayList<String> queue = new ArrayList<>();
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] parts = line.split(" ");
String cmd = parts[0];
if (cmd.equals("ADD")) {
// ...
} else if (cmd.equals("VIP")) {
// ...
} else if (cmd.equals("LEAVE")) {
// ...
} else if (cmd.equals("SERVE")) {
if (queue.isEmpty()) {
// ...
} else {
// ...
}
} else if (cmd.equals("CLOSE")) {
// ...
}
}
}
}
Java 版本問題
ArrayList 的 addFirst() 函數在 Java 21 之後才有,目前 DMOJ 的 Java 僅支援到 Java 19。請改用 add(0, item)。
Comments