Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

AtCoder Beginner Contest 091

A - Two Coins

A+B>=C ? "Yes":"No"


B - Two Colors Card Game

import java.util.*;
import static java.lang.System.*;
 
public class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		HashMap<String,Integer> map = new HashMap<>();
		int n = sc.nextInt();
		String s;
		for (int i=0; i<n; i++) {
			s = sc.next();
			map.put(s,map.getOrDefault(s,0));
			map.put(s,map.get(s)+1);
		}
		int m = sc.nextInt();
		for (int i=0; i<m; i++) {
			s = sc.next();
			map.put(s,map.getOrDefault(s,0));
			map.put(s,map.get(s)-1);
		}
		int max = 0;
		for (Map.Entry<String,Integer> e : map.entrySet()) {
			max = Math.max(max,e.getValue());
		}
		out.println(max);
	}
}


最初のn回のループでは、文字列とその出現回数をマップに記録する。
次のm回のループでは、受け取った文字列がマップに含まれているなら出現回数から1引く。
このようにして入力を受け取ったあとの、マップ内の値の最大値が答え。最大値が0未満なら0。


C - 2D Plane 2N Points

今回もC問題はACできなかった。解説を読んでみる。

1.x座標、y座標、色。この3つのメンバ変数を持つクラスを作成する
2.ArrayListに、上記の3つのメンバ変数を持ったすべての赤座標オブジェクトと青座標オブジェクトを入れる
3.listをx座標でソートする
4.0~list.size() までループを回して、先頭の座標から見ていく
4-1.座標が赤ならsetに追加
4-2.座標が青なら、取得した青座標よりもy座標が小さい赤座標をsetの中から探す。そのうち、もっともy座標が大きいものを削除。
5.リストの末尾まで処理したあと、N-list.size() をしたものが答え。

解法を見てなるほどと思ったが、listに入っているオブジェクトをメンバ変数の大小でソートする方法が分からない。特殊なソートのやり方が全然分かっていないので勉強しないとダメ。Comparatorとか。


D - Two Sequences

問題を見ていない


まとめ

特殊なソートについては早急に学ぶ必要があると感じた。マップを値でソートするやり方についてもかなり怪しいので、それも見直す必要がある。