問題文をしっかり読んでないミス
Nを十進法で表した文字列の先頭に0個以上の 0 をつけることで...
文字列の後ろにも"0"をつけるパターンとか考えてて解けず... となったが先頭だけでよかったのか... 乙すぎ....
StringBuilder完全に忘れてた
やっぱりしっかりと過去問しないとダメだなぁと思いました...
文字列系は唯一そこまで数学的じゃないので得意だったのに...
解き方
基本的に、回文系は文字列をひっくり消して比較するのがセオリーなはず
StringBuilderだとstr.reverse()
があることを知らなかった...
普通にfor文回して作り直してたよ...
というわけで次回からは使おう!
で、解説みると、今回は文字列は109なので、10回ループ回して
1. 反転文字列をつくる
2. オリジナルと反転文字列を比較する
3. 文字列の先頭に"0"をつける
を繰り返せばよい。
賢い解き方
しかし、上記は計算量が多い場合どうしたらいいのか、という疑問があるので
問題を観察すると、要は文字列末尾の"0"を排除して反転文字と比較すればよいことがわかる!
例1: 12100 -> 121 : OK
例2: 00121 -> NG
Javaには実はendsWith()
とかいうめっちゃ便利なメソッドがあるので、それで"0"を末尾に見つければ、切り取れば良いだけ!
package AtCoder.ABC198; import java.util.Scanner; public class MainB { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String n = sc.nextLine(); sc.close(); while(true) { if(n.endsWith("0")) n = n.substring(0, n.length()-1); else break; } StringBuilder tmp = new StringBuilder(n); String rev = tmp.reverse().toString(); if(rev.equals(n)) { System.out.println("Yes"); return; } System.out.println("No"); } }