[yukicoder] No.714 回転寿司屋のシミュレート
yukicoder contest 195 - C
No.714 回転寿司屋のシミュレート - yukicoder
yukicoder contest 195で出題された問題です。僕は他のことをやっていたので、コンテストには参加しませんでしたが、終了後に解いてみました。
考え方
客席をキー、食べたいものリストを値とするTreeMapを使って解きます。
回転ずしなので、客席の順にお寿司が流れてくることから、キーを辞書順で格納できるTreeMapが適当だと思いました。
あとは、問題文の指示の通りプログラムをつくるだけです。
コード
import java.util.ArrayList; import java.util.Map; import java.util.Scanner; import java.util.TreeMap; public class Exec0714 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); Map<Integer, ArrayList<String>> map = new TreeMap<Integer, ArrayList<String>>(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < N; i++) { int t = scan.nextInt(); if(t == 0) { int n = scan.nextInt(); int m = scan.nextInt(); ArrayList<String> list = new ArrayList<String>(); for(int j = 0; j < m; j++) { String s = scan.next(); list.add(s); } map.put(n, list); }else if(t == 1) { String s = scan.next(); boolean flag = false; for(int j : map.keySet()) { ArrayList<String> list = map.get(j); for(int k = 0; k < list.size(); k++) { if(s.equals(list.get(k))) { list.remove(k); map.put(j, list); sb.append(j).append("\n"); flag = true; break; } } if(flag) { break; } } if(!flag) { sb.append(-1).append("\n"); } }else { int n = scan.nextInt(); map.remove(n); } } scan.close(); System.out.println(sb.toString()); } static void disp(ArrayList<String> list) { for(String s : list) { System.out.print(s + " "); } System.out.println(); } }
感想
お寿司が誰にも取られないときのコードが少しへんですが、もっと良い書き方があったと思います。
最初コードを書いたとき、お寿司が誰にも取られない条件をうまく書いていなかったので、不正解となる出力が出てしましました。どうして不正解となるかを調べるために、disp()メソッドを使い間違いを探していたので、disp()メソッドが余計にあります。