import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
public static final Scanner scanner = new Scanner(System.in);
/**
* 배열의 N개의 원소가 연속적인 정수 수열로 표현될 수 있는지 판단하는 함수
* 중복이 존재하지 않는 가정
* @param data
* @param n
* @return
*/
public static boolean isConsecutive(int[] data, int n){
int l, g, m;
l = g = data[0];
for(int i=0; i<n; i+=1){
//주의 else if 하지 않기
//하나의 값이 최대/최소가 될 수 있기 때문
if(l > data[i]){
l = data[i]; //l = 배열 원소에서의 최소값
}
if(g < data[i]){
g = data[i]; //g = 배열 원소에서의 최댓값
}
}
m = (g-l+1); //폐구간 [l,g]까지의 연속수열 원소 수
//n:= 실제 배열의 원소 수
if(m==n){
//중복이 존재하지 않으므로 n개의 칸에 m(==n)개의 원소를 나열하는 방법은
//모두 하나씩 넣는것 뿐으로 유일하다
return true;
}else{
return false;
}
}
public static void main(String[] args) throws Exception {
int n = scanner.nextInt();
int[] data = new int[n];
for(int i = 0 ; i < n ; i ++)
{
data[i] = scanner.nextInt();
}
boolean result = isConsecutive(data, n);
if(result)
{
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}
10주 완성 알고리즘 코딩테스트 - goorm edu에서 들으실 수 있는 내용입니다.