Javaプログラミング開始〜AtCoderコンテスト参加

コーディングの記録用に作成しました。

大学時代に少しJavaをやっていたのですが、2024年に入り、ちゃんと勉強したくなったので、paizaラーニングに登録&課金。

ただいま5日ほど経っているでしょうか。



Javaの新・入門編が半分ほど進み、制御とかで頭ごっちゃになってきたので、旧?入門編も並行して進めています。

スキルチェックのC問題がぜんぜん解けないので、まずは講座をクリアするのが目標です。



それとは別に、AtCoderも昔登録だけしていたので、できる問題ないかな〜とチェックしてみたら、AtCoder Daily Trainingという模擬テストみたいなものを週3くらいで行っていることを知り、EASY部門で挑戦してみることにしました。



こちらの問題は過去問だそうなので、解法の投稿が許されているようです。

このブログでは主にこの問題の記録について書いていこうと思っています。



さて、今回取り組んだのは2024/01/17(Wed)16:00〜のEASY部門です。

最初のA問題 Legendary Playersは難なく解けました。

A - Legendary Players


本当は別のクラスから引っ張ってくるみたいな書き方を想像してたんだけど、新・入門編の内容がぜんぜん入ってなくて、この方法しか書けなかったです。

import java.util.Scanner;
import java.util.LinkedHashMap;

public class Main{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    LinkedHashMap<String, Integer> rating = new LinkedHashMap<>();
    
    rating.put("tourist", 3858);
    rating.put("ksun48", 3679);
    rating.put("Benq", 3658);
    rating.put("Um_nik", 3648);
    rating.put("apiad", 3638);
    rating.put("Stonefeang", 3630);
    rating.put("ecnerwala", 3613);
    rating.put("mnbvmar", 3555);
    rating.put("newbiedmy", 3516);
    rating.put("semiexp", 3481);
    
    String name = sc.nextLine();
    System.out.print(rating.get(name));
  }
}


プレビューだと色分けされてないんだけど、大丈夫なんだろうか・・・


それから、B問題は語尾が「er」か「ist」のいずれかの単語が入力され、どちらなのか判断して出力するという問題で、一見簡単なのですが、語尾をサーチする方法を知らなかったので、メソッドを調べました。

完全一致のequalsメソッドしか知らなかったけど、この機会にendsWithとstartsWithをしれて良かったです。使うぞ〜

B - Tires

import java.util.Scanner;

public class Main{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    
    String S = sc.nextLine();
    
    if (S.endsWith("er")) {
      System.out.print("er");
    } else {
      System.out.print("ist");
    }
  }
}

で、これは実行チェックしたにも関わらず”ist”を”est”と間違えて記述してしまい、1度目はWAとなってしまいました。残念・・・




最後に、C・Dとにらめっこしたのですが、ぜんぜんでした・・・
Dの高橋くんの食べるものが嫌いなものの可能性を判定するという問題は、イメージを作って書いてみたけど、断念。

D - Takahashi's Failure

import java.util.Scanner;
import java.util.LinkedHashMap;

public class Main{
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int K = sc.nextInt();
    
    LinkedHashMap<Integer, Integer> like = new LinkedHashMap<>();
    LinkedHashMap<Integer, Integer> dislike = new LinkedHashMap<>();
    
    for (int i = 0; i < N; i++) {
      like.put(i, sc.nextInt());
    }
    for (int i = 0; i < K; i++) {
      dislike.put(i, sc.nextInt());
    }
    
    int a = 0;
    int oishisa = like.get(a);
    if (like.get(a) <= like.get(a + 1)) {
      
    }
  }
}

おいしさの最大値を交換して、そのKeyを保持する、というふうにしたかったんですが、最大値が同じものの場合どうしたら良いんだ〜〜〜〜となって途中で終了しました。

最大値が同じものがあったら、それらのKeyを全て保持して・・・ってすると、収拾つかないきがしたし、おいしさの数値が全てバラバラだったらどうしていくんだろう?

何にせよ、今知識として持っているメソッドなどがあまりにも少ないので、知っていることを駆使してなんとか・・・と思ったのですが、これが限界でした。

記録のために、問題も載せたいけど、さすがにそれはダメかなあ?
今回はリンクにしておきます、、



C問題も、なんか頑張ればできそうな感じがするのですが、無限にフィールドがあるというのがわたしとしては厄介でした。

C - Number Box


早く入門編を終わらせて、アルゴリズムとか、他のメソッドとか仕入れて、また挑戦したいです。


今回は12位でした。半分くらいかな?
Bで間違えてなければ、もう少しいけたな。