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を使い分けるのがめんどうです。

にほんブログ村 IT技術ブログへ
1票ポチッと押して下さい♪このブログのランキングが少し上がります。