TopCorder過去問〜初級2
前回と同じ、TopCorderの過去問を日本語で紹介しているブログ。
JAVA5.0でGO!! | プログラミングに自信があるやつこい!!
【問題】※詳しくは上記リンクを参照 あなたには3つの文字列の配列があたえられます。 一つ目の配列はユーザー名の配列。 {"usrA","usrB","usrC"} 2つ目の配列はそのユーザーが扱うことのできるデータの文字列の入った配列。扱うことの できるデータが2個以上ある場合はデータがスペースで区切られています。 {"data1 data3","data2 data4","data3 data5 data6"} 3つ目の配列はデータの配列が入っています。 {"data1"} あなたは3つ目の配列のなかにあるデータをすべて扱うことのできるユーザを探さなければなりません。 上の例の場合: usrA
import java.util.*; class ReportAccess { public static String[] whoCanSee(String[] userNames, String[] allowedData, String[] reportData) { List<String> contain_list = new ArrayList<String>(); for (int i = 0; i < allowedData.length; i++) { List<String> allowed_list = Arrays.asList(allowedData[i].split(" ")); boolean contain_flag = true; for (String report : reportData) { //reportDataの各値が全てallowed_listに含まれればOK。 if (!allowed_list.contains(report)) { //1つでも含まれなければNG。ループを抜ける contain_flag = false; break; } } //OKだった場合、該当userNamesをリストに追加 if (contain_flag) contain_list.add(userNames[i]); } return (String[])contain_list.toArray(new String[0]); //リストを配列に変換 } public static void main(String args[]){ String[] userNames = {"jim", "scott", "barbara"}; String[] allowedData = {"users orders products", "products shipping", "tracking products orders"}; String[] reportData = {"products", "orders"}; for (String user : whoCanSee(userNames, allowedData, reportData)) { System.out.println(user); } } }
最近PHPばかり書いているので、配列とListとMapを使い分けるのがめんどうです。