문제

정수 집합 S가 주어졌을때, 다음 조건을 만족하는 구간 [A, B]를 좋은 구간이라고 한다.

A와 B는 양의 정수이고, A < B를 만족한다. A ≤ x ≤ B를 만족하는 모든 정수 x가 집합 S에 속하지 않는다. 집합 S와 n이 주어졌을 때, n을 포함하는 좋은 구간의 개수를 구해보자.

입력

첫째 줄에 집합 S의 크기 L이 주어진다. 둘째 줄에는 집합에 포함된 정수가 주어진다. 셋째 줄에는 n이 주어진다.

출력

첫째 줄에 n을 포함하는 좋은 구간의 개수를 출력한다.

제한

1 ≤ L ≤ 50 집합 S에는 중복되는 정수가 없다. 집합 S에 포함된 모든 정수는 1보다 크거나 같고, 1,000보다 작거나 같다. 1 ≤ n ≤ (집합 S에서 가장 큰 정수)

예시 #1

입력


4
1 7 14 10
2

출력


4

핵심 키워드는 ‘[n보다 작은 원소 , 그 원소보다 다음으로 큰 원소 ]’ 구간에서 n을 포함하는 구간이 어디인지 알아내는 것이다.

우선 n보다 작은 원소를 x, 그리고 그 원소 다음으로 큰 원소를 y라고 지정한다.

즉, [1,7,14,10] 이 있을 때 n이 4 이므로 우리가 볼 구간은 [1,7] 이다.
그런데 같은 원소는 포함하지 않기 때문에 엄밀히 따지자면 [2,6] 이다.
사실 [1,7]로 해서 부등호를 걸면 되긴 한데 생각하기 복잡해지므로 각각 값을 증감해 주기로 했다.

그럼 필요한 구간을 구했다면 답은 다음과 같다.

<n보다 작은 원소의 개수 && n 보다 큰 원소의 개수> + 여기서 `AND` 연산은 논리곱이므로 곱해주고 `OR` 연산은 논리합이므로 더해준다.

최종적으로 코드는 다음과 같아진다.

package codeforce;

import java.util.Scanner;

public class BOJ_1059 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int L = sc.nextInt();
		int[] arr = new int[L];
		for(int i = 0; i<L; i++) {
			arr[i] = sc.nextInt();
		}
		int n = sc.nextInt();
		int x = 0;
		for(int i = 0; i<L; i++) {
			if(arr[i]==n) {
				System.out.println(0);
				System.exit(-1);
			}
			if(arr[i] < n && x < arr[i]) x = arr[i];
		}
		
		int y = 1001;
		for(int i = 0; i<L; i++) {
			if(arr[i] > n && y > arr[i]) y = arr[i];
		}
		x++;
		y--;
		System.out.println((n-x)*(y-n+1)+(y-n));	
	}
}