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)的狀態變化如下:

  1. ADD Alice:Alice 排入尾端,隊伍為 [Alice]
  2. ADD Bob:Bob 排入尾端,隊伍為 [Alice, Bob]
  3. VIP Charlie:Charlie 插隊到最前方,隊伍變成 [Charlie, Alice, Bob]
  4. ADD David:David 排入尾端,隊伍變成 [Charlie, Alice, Bob, David]
  5. LEAVE Bob:Bob 離開隊伍,David 往前遞補,隊伍變成 [Charlie, Alice, David]
  6. SERVE:服務排頭的 Charlie,輸出 Serving: Charlie,隊伍剩下 [Alice, David]
  7. VIP Eve:Eve 插隊到最前方,隊伍變成 [Eve, Alice, David]
  8. SERVE:服務排頭的 Eve,輸出 Serving: Eve,隊伍剩下 [Alice, David]
  9. 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

There are no comments at the moment.