ABC213 B - Booby Prize(Java)

はじめに

※ 解答は Java言語 で記述してあります

 

競技プログラミングに本気で取り組めているわけでもなく、初心者の記事であり解答のコードはスマートではありません

じゃあ何故書くのかというと解けない問題について考えても理解が出来ない時は解答を参考にすると思うんだけど、大半のコードってスマートすぎて読んでも難しくて理解が出来ないのではないか。と思ったからです

それに自分と同じように初学者のコードの方が何かと理解しやすいのではないかと思った。

 

二点注意としては、

・実装に時間がかかった部分についてしか基本的には触れていないこと

・基本的な文法については初学者とはいえ理解している前提で書いていること

 

解説

 まずは解答

import java.util.Scanner;
import java.util.Arrays;

public class Main {
  public static void main(String args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int ary = new int[n];
    int ary2 = new int[n];
    int cnt = 0;

    for (int i = 0i < ni++) {
      ary[i= sc.nextInt();
      ary2[i= ary[i];
    }

    Arrays.sort(ary);

    for (int j : ary2) {
      if (j != ary[n-2]) {
        cnt ++;
      } else {
        System.out.print(cnt+1);
      }
    }
    sc.close();
  }
}

 

このコード自体はすぐに思い浮かんで書くことができたんだけど、sort()の癖というか使い方を理解していなくて時間がかかりました。

何に躓いたかというと、sort()は並び替えると同じ配列を参照しているもの全てにおいて順序が入れ替わる。

Arrays.sort(ary); の一行上にary2 = ary; と記述するとソート後にary2も並び替えられるってこと

 

その結果、ary2の要素追加を一つ目のfor文内に記述しないといけないコードになってしまいました。

 

最後に

何に躓いてこうだったとかは人それぞれ違うと思うので、解説について意味をなさいことの方が多分多いと思います。

なので解説はさっと読む程度にしてこういう解答もあるのか~とコードを参考にする程度にとどめて頂けると助かります。