個人的備忘録

プログラミングとか勉強した事のまとめ

すべての数字を記録する必要のない大小比較

Paizaの練習問題に「入力の配列による保持」というのがある。

曰く「整数 n と n 個の数 a_1, ..., a_n が改行区切りで与えられます。与えられた a_1, ..., a_n の中で最も大きい数を出力してください。

とのことで、最初に個数nが与えられた後数の羅列が改行区切りで続くのだが、最初これはa_1、\\\ a_nをforで回して配列に格納し、更に入れ子のforの中でMath.maxを使用し配列中の数を一つ一つ大小比較し…といった事を考えながらfor文のスコープに悩まされたりしていたのだが、解答では予め答えを代入するintを0を初期値として用意し、for文の中でsc.nextInt();を使用しつつ、入れ子のif文で答えとなるintとscanner中のintの大小を比較してscanner中のintの方が大きければ答えの方のintをscannerのintで上書きするという単純かつ簡潔な表記法だった。

数が複数あったので何も考えずに配列をどうにか組み込んで…等と考えていたが、問題中では入力された数を全て記憶しておく必要がなく答えとなるintが1つ残っていればいいので理に適った考え方だなと思うと同時にこれくらい自力で気付けるようにしたいなとも思った。

 

なんてことを考えながら以前躓いた「半角スペース区切りでの出力」の問題を解いたらあっさり行けた。

これも勝手にややこしく考えていた問題で、与えられた整数n回分だけ文字列paizaを半角スペース区切りで出力するという問題なのだが、最後のpaizaの後にはスペースを入れてはいけないという文言についてややこしく考えすぎていて、これもやはりfor文で文字列を完成させた後にlengthで文字列の長さを取得した後にStringbuilderでlengthを使って最後の半角スペースを削り出すと言った事を考えながらやって上手く行かなかったのだが、n-1回半角区切りでpaizaと打って最後の1回は別途System.out.print("paiza");と打てば済む話だった。こんな簡単なことではあるが自力で気付けたことでちょっとした達成感があった。