【Java】AtCoderのABC-189に参加しました。


こんばんは。

2021/1/23に、AtCoderのABC-189に参加しました。
レートは以下の通りとなっています。

C問題は処理時間でエラーになり、良いロジックを思いつけず負けました・・。
まだまだですね。
ともあれレートを13→51に更新!
A問題は5分以内、B問題15分以内で安定して解けるようになってきました。
半年前に始めたときはA問題ですら会社の昼休み中(1時間-お弁当の時間)に解けなかった事を思うと、着実な進歩です。

A問題

入力した3文字が全部同じか、そうでないかチェックするというもの。
String型で入力した文字列を、char型にして同じかチェックしました。

import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
  String c = sc.next();
  if((c.charAt(0)==c.charAt(1))&&(c.charAt(1)==c.charAt(2))){
System.out.println("Won");  
  }else{
System.out.println("Lost");  

  }
}
}

B問題

飲んだアルコール飲料の容量(v)と、アルコール度数(p)から、摂取したアルコール量(al)を求め、アルコール許容量(x)を超えて酔っぱらうかどうかを調べます。

整数型での答えを求められていましたが、int型は小数点以下を切り捨ててしまうので、思い切って数字を100倍して、アルコール度数10.5%→1050と算出させるようにしました。
もっとスマートなやり方があると思うんですけどね・・。

import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;

public class Main{
public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  int x = sc.nextInt();
  int v[] = new int[n];
  int p[] = new int[n];
  int al = 1;
  char flg = '0';
  for(int i=0;i<n;i++){
    v[i] = sc.nextInt();
    p[i] = sc.nextInt();
    if(i==0){
    al = v[i]*p[i]; 
    }
    else
    {
    al = al+(v[i]*p[i]); 
    }
    if(al>x*100){
      System.out.println(i+1);
      flg = '1';
      i=n;
    }
      //System.out.println("al/100 " + al/100);
  }

  if(flg=='0'){
      System.out.println(-1);
  }

}
}

C問題

*不正解のためソースは割愛します。
ロジック自体は正解に近づいていたようですが、処理時間がかかりTLEとなりました。
(21ケースAC、12ケースでTLE)。

やはり2重ループはだめでしたね。

感想

週末にちょっとした(失礼?)戦いがあるのは、いい刺激になります。
僕はこれでも高校時代は数学が好きで得意科目だったので、少し高校時代の数学の楽しさを思い出してきて楽しいです。これなら継続できそうな気がします。

これからもコツコツ取り組んで、茶色を目指したいと思います!
同じく灰色レベルで頑張っている方、お互い頑張りましょう!