0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

javaでAtCoder Beginner Contest 175を解く

Last updated at Posted at 2020-08-15

AtCoder Beginner Contest 175お疲れ様でした!
公式ページ

今回の自分の書いたコードはこちら
結果はA-CまでACできました。DもEもなんか難しかった・・・

以下簡単に解説します。

##問題A

文字列が最大で何回連続しているかを答える問題。
String.charAt()
で指定文字取得して、愚直に条件文書きました。

##問題B

3辺の長さが与えられて、それが三角形になるかどうかを出力する問題。
注意点として、同じ長さの辺は使用してはいけないことです。

計算量は気にせず3重ループでも十分間に合います。
3重ループ内はこんな感じ。まず辺の長さが同じものが無いかをチェックし、三角形かどうかを判定しました。

if (first == second || second == third || third == first) {
	continue;
}
if (isTriangle(first, second, third)) {
	count++;
}

三角形かどうかの判定は以下のように行いました

public static boolean isTriangle(int i, int j, int k) {
	int max = Math.max(i, j);
	max = Math.max(max, k);
	return i + j + k - max > max;
}

##問題C

数直線上のXからK回Dだけ移動して、原点にどれだけ最も近い位置を出力する問題。
ちょっと図を書いてみると、Xに比べてKとDが小さいときはひたすら原点に向かって移動すればよく、
そうでない場合は偶数か奇数かで値が決まることが分かります。

ある程度Xに比べてKかDが十分大きいと、原点のまわりでうろちょろするようなイメージです。

また、X, K, D全て大きいので、むやみに掛け算を使わないのがポイントです。(オーバーフローしてしまいます。)
まずは、Xが十分大きいときの分岐はこのように書けます。

if (x / d > k) {
	print(x - d * k);
	return;
}

そうでない場合はx%dd-x%dを偶奇で判別して出力しましょう。
また、Xは負の値も取りうるので注意です。これでめちゃくちゃ手間取りました・・・

##問題D

(後日追記)

##問題E

(後日追記)


感想

20分寝坊しちゃったのもあり、最低パフォーマンス(592)でした、、
レーティングも4回連続低下し、930にorz

D問題とE問題はしっかり復習して、後日きちんと更新してソースコードも書きます・・・!
くやしー!

最後まで読んでくださり、ありがとうございます!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?