ABC 229 参加してみました。(C問題まで)

初めまして。
茶色コーダーを目指して毎週コンテストに参加しています。

まだまだ先は長いですが、解けた問題を投稿していきたいと思います。
使用言語はJavaです。

#A問題
https://atcoder.jp/contests/abc229/tasks/abc229_a

####方針
　"#"(黒マス)が3つ以上あれば、黒マスをどこに配置しても条件を満たします。
逆に黒マスが2つのみであれば、配置される位置によって判定が変わる。
具体的には黒マスが縦に並んでいるか、横に並んでいる場合は条件を満たす。
そうでない場合は条件を満たさないとします。

####コード
**標準入力と出力に関するコードは省略しています。**

```main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
	public static void main(String[] args) {
		FastScanner fs = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);

		String s1 = fs.next();
		String s2 = fs.next();
		int black = 0;
		for(int i = 0;i < 2;i++) {
			if(s1.charAt(i) == '#') {
				black++;
			}
			if(s2.charAt(i) == '#') {
				black++;
			}
		}

		if(black >= 3) {
			out.println("Yes");
		}else if(s1.charAt(0) == '#' && s1.charAt(1) == '#') {
			out.println("Yes");
		}else if(s1.charAt(0) == '#' && s2.charAt(0) == '#') {
			out.println("Yes");
		}else if(s1.charAt(1) == '#' && s2.charAt(1) == '#') {
			out.println("Yes");
		}else if(s2.charAt(0) == '#' && s2.charAt(1) == '#') {
			out.println("Yes");
		}else {
			out.println("No");
		}

		out.flush();
		fs.close();
	}

}

```
分岐が複雑になってしまったので、もう少しスッキリさせるべきだったのが反省点です…

#B問題
https://atcoder.jp/contests/abc229/tasks/abc229_b
**標準入力と出力に関するコードは省略しています。**

####方針
　整数A,Bは共に1 ≦ A,B ≦ 10^18で、long型でも受け取ることができないので文字列で受け取ります。文字列として受け取ったA,Bに関して末尾から(一の位に相当)一桁ずつ探索して和が10以上であればHardとして、そうでなければEasyとする。

####コード
 ```Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
	public static void main(String[] args) {
		FastScanner fs = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);

		String aString = fs.next();
		String bString = fs.next();

		boolean flag = false;

		for(int i = 1;i <= Math.min(aString.length(), bString.length());i++) {
			int intA = Character.getNumericValue(aString.charAt(aString.length() - i));
			int intB = Character.getNumericValue(bString.charAt(bString.length() - i));

			int sum = intA + intB;

			if(sum >= 10) {
				flag = true;
				break;
			}
		}

		if(flag) {
			out.println("Hard");
		}else {
			out.println("Easy");
		}

		out.flush();
		fs.close();
	}

}

```

#C問題
https://atcoder.jp/contests/abc229/tasks/abc229_c
**標準入力と出力に関するコードは省略しています。**


####方針
「可能なピザの美味しさの最大値を求める」ということなので、1gあたりの美味しさ(Ai)が大きい方から順番にWgに到達するまで、足し込んでいけば良いです。

####コード
```Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.NoSuchElementException;

public class Main {
	public static void main(String[] args) {
		FastScanner fs = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);

		int n = fs.nextInt();
		long w = fs.nextLong();

		long[][] cheese = new long[n][2];

		for(int i = 0;i < n;i++) {
			//美味しさ
			cheese[i][0] = fs.nextLong();
			//重さ
			cheese[i][1] = fs.nextLong();
		}

		//チーズの美味しさを昇順ソート
		Sort2DArrayBasedOnColumnNumber(cheese, 1);

		long total = 0;
		for(int i = n - 1;i >= 0;i--) {
			if(w >= cheese[i][1]) {
				total += cheese[i][0] * cheese[i][1];
				w -= cheese[i][1];
			}else {
				total += cheese[i][0] * w;
				break;
			}
		}

		out.println(total);
		out.flush();
		fs.close();
	}

	public static  void Sort2DArrayBasedOnColumnNumber (long[][] array, final int columnNumber){
        Arrays.sort(array, new Comparator<long[]>() {
            @Override
            public int compare(long[] first, long[] second) {
               if(first[columnNumber-1] > second[columnNumber-1]) return 1;
               else if(first[columnNumber - 1] == second[columnNumber - 1]) return 0;
               else return -1;
            }
        });
    }

}
```

#結果
3完でした。D問題は分からず…

以上となります。
ありがとうございました。

#参考文献
https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4

https://www.delftstack.com/ja/howto/java/sort-2d-array-java/