【精進記録】2020年6月28日(日)

本日はABC110のA,Bを解きました。

ABC110 A- Maximize the Formula

かかった時間:だいたい10分くらい

提出コードはこんなかんじ。

import java.util.*;

class Main {
	public static void main(String[] args) {
		ArrayList<Integer> A = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		A.add(sc.nextInt());
		A.add(sc.nextInt());
		A.add(sc.nextInt());
		sc.close();
		Collections.sort(A);
		String ans = (""+A.get(2))+A.get(1);
		System.out.println(Integer.parseInt(ans)+A.get(0));
	}
}

解法:

A, B, Cのうち最も大きな値をmax, 二番目に大きな値をmid, 最も小さな値をminとすると、

(お小遣いの最大値)=max*10 + mid + min

となる。……のだが解いてる最中は上記のような計算式など思いつかなかったので、文字列の足し算を利用した。一応正答は正答だったが、コード量が増えてしまったのは良くなかったので反省。

ちなみに10分もかかったのは、ArrayListをソートするメソッドと文字列を数値に変換する方法について調べていたことが9割。

ABC110 B- 1 Dimensional World's Tale

かかった時間:25分くらい
提出コード:

import java.util.*;

class Main {
	public static void main(String[] args) {
		boolean flag = true;
		ArrayList<Integer> x = new ArrayList<>();
		ArrayList<Integer> y = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int X_ = sc.nextInt();
		int Y_ = sc.nextInt();
		for(int i=0;i<N;++i){
			x.add(sc.nextInt());
		}
		for (int i = 0; i < M; ++i) {
			y.add(sc.nextInt());
		}
		String ans = "War";
		int Z = Collections.max(x)+1;
		int ymin = Collections.min(y);
		if(X_<Z && Z<=Y_ && ymin>=Z){
			ans = "No War";
		}
		System.out.println(ans);
	}
}

解法:

Zに(xの最大値+1)を代入して条件の一つを満たすものとしておく。その上で他二つの条件を満たすか判定。

(yの最小値)>=Z かつ X<Z<=Yを満たせば"No War"、そうでなければ"War"。

もっとスマートな解法が解説PDFに提示されてたので、ああいうのをすぐに思いつけるようになりたい。

ちなみにCollections.max(), Collections.min()は今回初めて知った。



この記事が気に入ったらサポートをしてみませんか?