본문 바로가기

알고리즘

입력받은 중복 없는 정수형 배열이 정렬시 연속 수열이 될 수 있는지에 대해 판단하는 함수

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에서 들으실 수 있는 내용입니다.