baru003のブログ

baruの雑記兼備忘録

AOJ 0100

・問題リンクSale Result

・コメント
久しぶりのAOJとなりましたがなんとか一発ACできて一安心です
はじめ、MAPを2つも使わずに解こうと思っていたんですけれどこんな時間で睡魔に負けてしまって妥協してしまっただなんて言えn(ry
無駄な書き方が多いですが、少しずつまたプログラミングに慣れ始めてきたら調整して簡潔でいいコードが書けたらと思います

・ソース

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class P0100 {

	/* mainメソッド */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// データ数:n
		while (true) {
			int n = sc.nextInt();
			if (n == 0) {
				return;
			}
			// key:String,value;LongのMap作成
			Map<String, Long> m = new TreeMap<String, Long>();
			// num[]のインデックス
			int cnt = 0;
			// num[]は社員番号を格納する
			String[] num = new String[n];
			// n入力に対する処理
			while (n > cnt) {
				// 社員番号入力
				num[cnt] = sc.next();
				// 販売単価入力
				long price = sc.nextLong();
				// 売上数量
				long volume = sc.nextLong();
				// すでに知っている社員であったら
				if (m.containsKey(num[cnt])) {
					// 既存の売上金額んい加算して再記憶
					m.put(num[cnt], m.get(num[cnt]) + price * volume);
				}
				// 初めての社員であればそのまま記憶
				else {
					m.put(num[cnt], price * volume);
				}
				// 社員配列インデックスを進める
				cnt++;
			}
			// 一定金額を超えた人がいるかの判定フラグ
			boolean flag = false;
			// 出力した社員番号を覚えておくmapを用意
			Map<String, Long> mapped = new TreeMap<String, Long>();
			// 全社員について見ていく
			for (String x : num) {
				// 社員のトータル売上が条件を満たし、かつ、既出の社員でなければ
				if (m.get(x) >= 1000000 && !mapped.containsKey(x)) {
					// 社員番号を出力
					System.out.println(x);
					// 出力したのでmappedに追加
					mapped.put(x, m.get(x));
					// トータル金額が条件以上の社員がいたのでflagを立てる
					flag = true;
				}
			}
			// フラグが立っていなかったら(条件を満たす社員がいなかったら)
			if (!flag) {
				// NAを出力
				System.out.println("NA");
			}
		}
	}
}