Coding_Gamesメモ_Graffiti_on_the_fence
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
塀を塗り替える仕事を受け、下請けに注文した。
Lメートルの塀があり、Nグループの下請けからメートル単位で作業の報告を受けている
残りの範囲を出力してください。
ルール
インプット
1行目 塀の長さ
2行目 報告の数
3行目から 作業した範囲を "st ed" の形式で入力
アウトプット
連続した作業していない範囲を"st ed"の形式で出力
途切れているなら改行を行う
全て作業が終わっていたら"All painted"を出力
使用したクラス
TreeMap
TreeMap<キーの型 , データの型> 名前 = new TreeMap<キーの型 , データの型>() ;
TreeMap.put(キー , データ)
キーとデータを登録
x = TreeMap.get(キー)
キーと紐づけられたデータを出力
(Boolean) = TreeMap.containsKey(x)
xがキーとして登録されているか
TreeMap.replace( x , y )
xがキーとして登録されていたら、データをyに置き換える
(Set) = TreeMap.keySet()
キーのリストをSetとして出力
for-each文に使える
x = TreeMap.ceilingKey(y)
y以上のキーを出力
y <= x
x = TreeMap.higherKey(y)
yを超えるキーを出力
y < x
考え方1-boolean配列を作る
すべての作業報告から全体の作業状況を作り、出力形式に合わせて出力
問題点
Javaでは配列の要素数はintのため要素数Lの配列を作れつはずだがlong fenceでjava.lang.OutOfMemoryError: Java heap space
となってしまう
Coding_Games では要素が52,231,260個を超える配列を作ろうとするとエラーになる
英語の説明でも「できるけどオススメしない」みたいなことが書かれている
すべて入力形式通りの数字の範囲で処理する考え方2
Coding_Games:https://www.codingame.com/ java 配列 上限解放|teratail: https://teratail.com/questions/135596 TreeMap (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/util/TreeMap.html