Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

プログラミングコンテスト

今年も白虎大学でプログラミングコンテストが開催されることになりました。コンテストではいくつかの問題が出題され、それぞれ難易度に応じた得点が割り当てられています。

実行委員会は、解いた問題の数とそれらの得点の両方を考慮し、次のルールに基づいて各チームのスコアを計算することにしました。

「あるチームが正解した問題のうち、得点が A 以上であるものが A 問以上あることを満たすような最大の A を、そのチームのスコアとする」

あるチームが正解した問題の数と、それらの問題の得点から、チームのスコアを計算するプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
p1 p2 ... pN

１行目にチームが正解した問題の数 N (1 ≤ N ≤ 100) が与えられる。２行目に正解した各問題の得点 pi(1 ≤ pi ≤ 100) が与えられる。

Output

チームのスコアを１行に出力する。

Sample Input 1

7
5 4 3 10 2 4 1

Sample Output 1

4

得点が 4 以上の問題を 4 問以上正解しているので、スコアは 4 となる。

Sample Input 2

3
1 1 100

Sample Output 2

1

得点が 1 以上の問題を 1 問以上正解しているので、スコアは 1 となる。

Sample Input 3

4
11 15 58 1

Sample Output 3

3

得点が 3 以上の問題を 3 問以上正解しているので、スコアは 3 となる。

Solution in JAVA (judge verdict: Accepted)

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

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n=scan.nextInt();
		int[] a=new int[n];
		int ans=0;
		for(int i=0;i<n;i++){
			a[i]=scan.nextInt();
		}
		
		Arrays.sort(a);
		
		for(int i=0;i<n;i++){
			if(a[i]>=n-i && n-i>ans){
				ans=n-i;
			}
		}
		System.out.println(ans);
	}
}