Coding_Gamesメモ_XML_MDF-2016

Coding_Gamesメモ_XML_MDF-2016

javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:

System.err.println( );

を使うとデバックしやすくなる。(エラー出力は評価に影響しない)

内容

一番重いタグを探す

ルール

開始タグと終了タグで作られた文字列の中で一番重いタグを探す

タグのルール

  • 開始タグ アルファベット1文字
  • 終了タグ '-' + '(終了させたいタグ)'
  • タグは重複することがある
  • タグの重さは1/n の合計で計算する


"ab-bcd-d-c-ae-e"
a( b c[ d{} ] ) e()

タグ a 深さ 1 重さ 1/1
タグ b 深さ 2 重さ 1/2
タグ c 深さ 2 重さ 1/2
タグ d 深さ 3 重さ 1/3
タグ e 深さ 1 重さ 1/1

例2
"a-abab-b-a-b"
a() b( a[ b{} ] )

タグ 1つ目のa 深さ 1 重さ 1/1
タグ 1つ目のb 深さ 1 重さ 1/1
タグ 2つ目のa 深さ 2 重さ 1/2
タグ 2つ目のb 深さ 3 重さ 1/3

タグ a の重さ 1/1 + 1/2 = 1.5
タグ b の重さ 1/1 + 1/3 = 1.33...

インプット

1行目 タグ階層の文字列 sequence >= 1024

アウトプット

一番重いタグ

使用したクラス

String

(char) = String.toCharArray();
char配列を出力

考え方

タグ毎の重さを計算するためアルファベット分の配列を作る

char C = 'c' ;
arphabet[ (int) C - (int) 'a' ]

とすることでa-z から数字へ変換できる
重さは小数点以下になることがあるので小数点以下を扱える方が必要
計算は優先順位がある(() * +など) ので一部が小数点以下を扱える型でもint同士の計算になってしまうことがある

タグの配列に現在の階層の逆数を掛けて足していき、最後に一番大きいタグを出力する

Coding_Games:https://www.codingame.com/
String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
文字コード - 文字列 数値 変換 java:https://code.i-harness.com/ja-jp/q/a4fee2