0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-20

こんばんは。

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

image.png

開始から1時間くらいでC問題を突破しました。
D問題の途中で時間切れとなりました。D問題も内容は理解し、ロジックが良い感じに組み立てられそう・・というところでした。

順位は6236位でした。はあ、先は長いなあ・・。
レートは173→184に更新!数字の伸びが鈍くなってきたぞ。

A問題

今までに集めたコインはX枚。
100の倍数ごとにご褒美がもらえる。あと何枚でご褒美がもらえるか。
下2桁を算出し、100から減算して残りの枚数を求める事に。
でも、そうするとXが1桁の時にエラーになりますね。考慮が抜けて一度エラーになりました。
ソースは汚いですが、3桁以上か否かで分岐しています。

import java.util.Scanner;
 
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
  String x = sc.next();
  int len = x.length();
  if(len>=3){
  String ju = String.valueOf(x.charAt(len-2));
  String ichi = String.valueOf(x.charAt(len-1));
  //System.out.println(" ju " + ju);
  //System.out.println(" ichi " + ichi);
  String s2 = ju + ichi; 
  int s2i = Integer.parseInt(s2);
  System.out.println(100-s2i);
  }else{
  int s2i2 = Integer.parseInt(x);  
  System.out.println(100-s2i2);
  }
}
}

B問題

先頭から奇数番目の文字が全て英小文字であり、かつ、先頭から偶数番目の文字が全て英大文字であるような文字列を 読みにくい文字列 と呼ぶ。
入力した文字列は読みにくい文字列かどうか。

大文字・小文字の判別・・これか!!
http://www.kenmiya.info/?p=115

強引にこんなロジックにしてしまいました・・・(笑)

import java.util.Scanner;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
  String s = sc.next();
  int len = s.length();
  char flg = '0';
  for(int i=0;i<len;i++){
      if(i%2!=0){
      if((s.charAt(i)=='A')||
         (s.charAt(i)=='B')||
         (s.charAt(i)=='C')||
         (s.charAt(i)=='D')||
         (s.charAt(i)=='E')||
         (s.charAt(i)=='F')||
         (s.charAt(i)=='G')||
         (s.charAt(i)=='H')||
         (s.charAt(i)=='I')||
         (s.charAt(i)=='J')||
         (s.charAt(i)=='K')||
         (s.charAt(i)=='L')||
         (s.charAt(i)=='M')||
         (s.charAt(i)=='N')||
         (s.charAt(i)=='O')||
         (s.charAt(i)=='P')||
         (s.charAt(i)=='Q')||
         (s.charAt(i)=='R')||
         (s.charAt(i)=='S')||
         (s.charAt(i)=='T')||
         (s.charAt(i)=='U')||
         (s.charAt(i)=='V')||
         (s.charAt(i)=='W')||
         (s.charAt(i)=='X')||
         (s.charAt(i)=='Y')||
         (s.charAt(i)=='Z')){
         }else{
          flg = '1';
         }
      }else{
      if((s.charAt(i)=='a')||
         (s.charAt(i)=='b')||
         (s.charAt(i)=='c')||
         (s.charAt(i)=='d')||
         (s.charAt(i)=='e')||
         (s.charAt(i)=='f')||
         (s.charAt(i)=='g')||
         (s.charAt(i)=='h')||
         (s.charAt(i)=='i')||
         (s.charAt(i)=='j')||
         (s.charAt(i)=='k')||
         (s.charAt(i)=='l')||
         (s.charAt(i)=='m')||
         (s.charAt(i)=='n')||
         (s.charAt(i)=='o')||
         (s.charAt(i)=='p')||
         (s.charAt(i)=='q')||
         (s.charAt(i)=='r')||
         (s.charAt(i)=='s')||
         (s.charAt(i)=='t')||
         (s.charAt(i)=='u')||
         (s.charAt(i)=='v')||
         (s.charAt(i)=='w')||
         (s.charAt(i)=='x')||
         (s.charAt(i)=='y')||
         (s.charAt(i)=='z')){
         }else{
          flg = '1';
         }
      }        
          
  }
  
  if(flg=='1'){
  System.out.println("No");
  }else{
  System.out.println("Yes");
  }
  
  //System.out.println(100-s2i);
  //System.out.println(100-s2i2);
}
}

C問題

C問題は、かみ砕いてここに記載するのも難しいので、ソースだけ載せたいと思います。
問題文の式の通りに処理を積み上げてテストをしながら、何とか形にできました。

こんなプログラムになったっす!!

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;

public class Main{
public static void main(String args[]){
  Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  String ns = String.valueOf(n);
  int k = sc.nextInt();
  int fwk = n;
  int g1 = 0;
  int g2 = 0;
  char gwk[] = new char[ns.length()]; 
  String gstwk = "";
  int gstwk1 = 0;
  int gstwk2 = 0;
  for(int i=0;i<ns.length();i++){
    gwk[i] = '-';
  }
  String fwk2 = String.valueOf(fwk);
  for(int a=1;a<=k;a++){
      fwk2 = String.valueOf(fwk);
      for(int i=0;i<fwk2.length();i++){
         gwk[i]=fwk2.charAt(i);
      }
      Arrays.sort(gwk);
      gstwk1=0;
      gstwk2=0;
      //g1//
      gstwk = "";
      //for(int i=fwk2.length()-1;i>=0;i--){
      for(int i=ns.length()-1;i>=0;i--){
        if(gwk[i]!='-'){
        gstwk = gstwk + String.valueOf(gwk[i]);
        }
      }
      gstwk1 = Integer.parseInt(gstwk);
      //g1//
      //g2//
      gstwk = "";
      //System.out.println(" gstwk1 " + gstwk1);
      //for(int i=0;i<fwk2.length();i++){
      for(int i=0;i<ns.length();i++){
        if(gwk[i]!='-'){
        gstwk = gstwk + String.valueOf(gwk[i]);
        }
      }
      gstwk2 = Integer.parseInt(gstwk);
      //System.out.println(" gstwk2 " + gstwk2);
      //g1//
    
      fwk = gstwk1 - gstwk2;
      //System.out.println(" fwk " + fwk);
    
      //clear
      for(int i=0;i<ns.length();i++){
      gwk[i] = '-';
      }
      //clear
  }
  //test
  //for(int i=0;i<3;i++){
  //System.out.println(gwk[i]);
  //}
  //test

  System.out.println(fwk);
  
}
}

感想

今回は、自分に深く関わりのある企業が主催のコンテストでした。
それだけにC問題までは絶対に解きたかったので、最低ラインはクリアできました。
D問題、もうちょっと早くできるといいな~。

レート200を直近の目標にして頑張ります。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?