#31107: Java 使用Queue解法 AC


ootmnt150oo@gmail.com (星月)

學校 : 不指定學校
編號 : 126341
來源 : [118.168.146.97]
最後登入時間 :
2023-01-02 17:47:42
b981. YoJudge 預練(時間之章) -- b961YoJudge | From: [61.219.31.2] | 發表日期 : 2022-07-12 09:19

由於Stack是FILO的性質拿13hour 會變成31 ruoh所以我使用了FIFO性質的Queue進行處理 13hour-> 13 hour

這題我使用了兩個Queue存取文字time 和數字ints

想法邏輯是把讀取到的字串變成字元陣列每個都跑過一次 只要是遇到文字("houirmsn")的話就把time加入上面的字元

當碰到數字時先判斷我的time裡面是不是空的 假如不是空的我們就直接先把前一輪讀取的資料先進行運算

下面是代碼

package b981;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class b981 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()) {
            long ans = 0;
            String str = scanner.nextLine();
            Queue<String> ints = new LinkedList<>();
            Queue<String> time = new  LinkedList<>();
            for(char c: str.toCharArray()) {
                if ("houirmsn".contains(String.valueOf(c))) {
                    time.add(String.valueOf(c));
                }else {
                    String opString = "";
                    String intString = "";
                    while (time.peek() !=null) {
                        opString+=time.poll();
                    }
                    if(!opString.equals("")) {
                        while (ints.peek()!=null) {
                            intString += ints.poll();
                        }
                        ans += eval(Float.valueOf(intString), opString);
                    }
                    ints.add(String.valueOf(c));
                }
            }
            
            String opString = "";
            String intString = "";
            while (time.peek() !=null) {
                opString+=time.poll();
            }
            if(!opString.equals("")) {
                while (ints.peek()!=null) {
                    intString += ints.poll();
                }
                ans += eval(Float.valueOf(intString), opString);
            }
            System.out.println(ans);
        }
    }
    public static long eval(Float a,String op) {
        switch (op) {
        case "h":
        case "hour":
            return (long) (a*60*60*1000);
        case "m":
            case "min":
                return (long) (a*60*1000);
        case "s":
            return (long) (a*1000);
            case"ms":
                return Math.round(a);
        default:
            return 0;
        }
    }
}

 
ZeroJudge Forum