AtCoder Beginner Contest 093 参加記録

久しぶりに時間に間に合ったのでAtcoderやりました。
昨年からJavaを覚える目的で競技プログラミングを始めたのですが、なかなか楽しいです。
実際にコードを書くので、言語覚えるのにおすすめ。難しくて嫌になる時もありますが。

今回はAtCoder Beginner Contest 093に参加しA、B問題まで解きました。

スポンサーリンク

A問題

入力される文字を組み合わせてabcが作れればYesを、無理ならNoを返す問題。

今回は入力された文字の中にA、B、Cが1個ずつ含まれているか判定しました。
文字列操作系は苦手です。もっといい方法ある気がする。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        int A = 0;
        int B = 0;
        int C = 0;

      Scanner in = new Scanner(System.in);

      String str = in.nextLine();

      char[] c = str.toCharArray();

      for(int cnt=0; cnt <str.length(); cnt++) {
          if(c[cnt] == 'a') {
              A++;
          }
          else if(c[cnt] == 'b') {
              B++;
          }
          else if(c[cnt] == 'c') {
              C++;
          }
      }

      in.close();

      if(A==1 && B==1 && C==1) {
          System.out.println("Yes");
      } else {
          System.out.println("No");
      }
    }
}

B問題

A 以上 B 以下の整数の中で、小さい方から K 番目以内であるか、大きい方から K 番目以内である整数を全て出力する問題。

出力結果は重複は含まなかったり、KがAとBの範囲外だった場合を考えずに書いていたので2回WA出してしまいました。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

      Scanner in = new Scanner(System.in);

      long A = in.nextLong();
      long B = in.nextLong();
      long K = in.nextLong();
      long a = A;
      long cnt = 0;

      // A〜Bの範囲を超えて探索しないように
      if(K > B - A) {
          K = B-A+1;
      }
      // 小さい方から出力
      while(cnt < K) {
          System.out.println(a);
          a++;
          cnt++;
      }
      // 大きい方から出力
      long cnt2 = 0;
      long b = B - K + 1;
      while(cnt2 < K) {
          if(b >= a) {
              System.out.println(b);
          }
          cnt2++;
          b++;
      }

    }

}

感想

数ヶ月ぶりにやったのもありますが、いつもより難しく感じました。
解説動画上がったら、見て再度解き直します。
C問題くらいまでは解けるようになりたい。
今までは案件都合でJavaを使ってましたが、今は別案件に移ったので別の言語で挑戦したいですね。

それでは。

スポンサーリンク

このページを共有する

スポンサーリンク