
배열은 같은 타입의 여러 값을 하나의 변수에 저장할 수 있는 자료구조.
배열은 고정된 크기를 가지며, 한번 생성되면 크기를 변경할 수 없음
배열을 선언하려면 배열의 타입과 배열의 이름을 지정.
정수형 배열을 선언하는 예제)
int[] numbers;
또는
int numbers[];
두 방법 모두 유효하지만 일반적으로는 int[] numbers; 를 사용
배열을 생성하려면 new 키워드를 사용. 배열의 크기를 지정하여 배열 생성 가능
numbers = new int[5]
위 코드는 5개의 정수를 저장할 수 있는 배열 생성
배열을 선언과 동시에 초기화 가능
int[] numbers = new int[5]
또는 초기값을 지정하면서 배열 선언 가능
int[] numbers = {1, 2, 3, 4, 5};
배열 요소에 접근하려면 인덱스를 사용. 배열의 인덱스는 0부터 시작
numbers[0] = 10;
int value = numbers[1];
첫번째 요소에 값 10 할당, 두번째 요소 값을 변수에 저장
배열 요소를 반복문으로 순회하기
for (int i = 0; i < numbers.length; i++)
배열의 시간복잡도는 다양한 연산에 따라 다름. 각 연산의 시간 복잡도를 이해하면, 배열을 사용 할 때 성능에 미치는 영향 예측 가능.
접근(Access)
-특정 인덱스에 있는 요소에 접근하는 연산
-시간복잡도 O(1)
-배열은 인덱스를 통해 직접 접근할 수 있으므로, 요소를 찾는데 걸리는 시간은 상수 시간
검색(Search)
-배열에서 특정 값을 찾는 연산
-시간복잡도 O(n)
-최악의 경우 배열의 모든 요소를 확인해야 하므로, 요소의 갯수(n)에 비례하여 시간이 걸림
삽입(Insertion)
-배열의 특정 위치에 새로운 요소를 추가하는 연산
-시간복잡도 O(n)
-배열의 특정 위치에 요소를 삽입하려면, 그 위치 이후의 모든 요소를 한칸씩 이동시켜야 함
삭제 (Deletion)
-배열의 특정 위치에 있는 요소를 삭제하는 연산
-시간복잡도 O(n)
-배열의 특정 위치에 있는 요소를 삭제하려면, 그 위치 이후의 모든 요소를 한칸씩 당겨야 함



import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
if (N < 1 || N > 1_000_000) {
return;
}
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 0; i < N; i++) {
int num = sc.nextInt();
if (num < -1_000_000 || num > 1_000_000) {
return;
}
if (num < min) {
min = num;
}
if (num > max) {
max = num;
}
}
System.out.println(min + " " + max);
}
}