코딩테스트/자료구조
1. 일반 배열(int[ ]) 사용법 (기본타입, 객체 배열)
초코chip
2024. 4. 12. 15:17
개념
- 값 접근(읽기): O(1) - 인덱스를 사용하여 바로 접근 가능
- 값 삭제/삽입: O(n) - 주변에 있는 값들을 옮겨주는 오버헤드 발생
일반 배열
연산 종류 정리
- 생성
- 값 접근(읽기)
값 삽입, 삭제:일반 배열로 감히 삽입,삭제를 할 생각하지 마라- 배열 길이: arr.length
- 배열 최대,최소: Arrays.stream(arr).max().orElse(-1);
- 배열 전체 초기화: Arrays.fill(arr,1);
- 베열 전체 출력: Arrays.toString(arr)
- 배열 정렬: Arrays.sort(arr)
배열 생성
//배열 선언
int[] test = new int[n];
//배열 선언 및 초기화
int[] test = {1,2,3};
배열 길이
int[] arr = new int[n];
arr.length
배열 최대/최소
java.util.Arrays 클래스 활용
int[] arr = {1, 2, 3, 4, 5};
int max = Arrays.stream(arr).max().getAsInt();
int min = Arrays.stream(arr).min().getAsInt();
배열 전체 초기화
int[] arr = new int[10];
// 배열을 1로 채움
Arrays.fill(arr, 1);
배열 전체 출력
java.util.Arrays클래스 함수 이용
int[] score = {12,3,4,5,6,7};
System.out.println(Arrays.toString(score));
//결과: [12, 3, 4, 5, 6, 7]
배열 정렬
java.util.Arrays클래스 함수 이용
+ 내림차순은 그냥 일반 배열 사용하지 말자
//오름차순 정렬 -> [0,1,2,3,4]
int[] arr = { 3,2,0,1,4 };
Arrays.sort(arr);
//내림차순 정렬 (주의! Wrapper클래스여야만 아래 방식 이용 가능)
// -> [4,3,2,1,0]
Integer[] arr2 = new int[n];
Arrays.sort(arr2, Comparator.reverseOrder())
// 배열 일부부만 정렬 (s ~ e-1까지 정렬)
int[] arr = { 3,2,0,1,4 };
Arrays.sort(arr, 0, 3); // 배열 요소 0, 1, 2 만 정렬 -> > [0, 2, 3, 1, 4]
객체 배열
일반 타입이 아닌 객체를 배열에 넣는 경우 아래 연산 사용 방법이 달라진다.
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person[] people = new Person[3];
people[0] = new Person("John", 30);
people[1] = new Person("Alice", 22);
people[2] = new Person("Bob", 25);
연산 종류
- 배열 전체 출력: Arrays.toString(array) + toString() 오버라이딩
- 객체 비교 방법 추가: Comparable 인터페이스 구현 or Comparator 제공 or Comparator 람다식 제공
- 배열 최대,최소: Arrays.stream(array).max(comparator).orElse(null), Arrays.stream(array).min(comparator).orElse(null)
- 배열 정렬: Arrays.sort(array, comparator)
배열 전체 출력
클래스에서 toString() 메서드에 대해서 오버라이딩을 해야한다.
class Person {
@Override
public String toString() {
return name + ": " + age;
}
}
Person[] people = new Person[3];
people[0] = new Person("John", 30);
people[1] = new Person("Alice", 22);
people[2] = new Person("Bob", 25);
System.out.println(Arrays.toString(people));
// 결과: [John: 30, Alice: 22, Bob: 25]
객체 비교 방법 추가
Comparable 인터페이스 구현 및 compareTo 메서드 오버라이딩
- 객체 내부에서 자체적으로 비교 가능
- 해당 방법을 사용하면 일반 자료형에서 사용한 방법과 동일하게 사용 가능
class Person implements Comparable<Person> {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return this.age - other.age; // 나이를 기준으로 오름 차순 비교
}
}
Comparator 구현 및 compare 메서드 오버라이딩
- 정렬 기준을 외부에서 전달하는 방법
class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.age - p2.age; //오름차순 비교
}
}
배열 최대, 최소
최대, 최소를 구할 때는 오름차순, 내림차순 관계 없이 결과가 동일하게 나옴
Person[] people = new Person[3];
people[0] = new Person("John", 30);
people[1] = new Person("Alice", 22);
people[2] = new Person("Bob", 25);
// 구현한 것 전달
Person youngest = Arrays.stream(people).min(new AgeComparator()).orElse(null);
Person oldest = Arrays.stream(people).max(new AgeComparator()).orElse(null);
// 람다식 사용
Person youngest = Arrays.stream(people).min((p1, p2) -> p1.age - p2.age).orElse(null);
Person oldest = Arrays.stream(people).max((p1, p2) -> p1.age - p2.age).orElse(null);
배열 정렬
// 나이에 따라 오름차순 정렬
Arrays.sort(people, (p1, p2) -> p1.age - p2.age);
// 나이에 따라 내림차순 정렬
Arrays.sort(people, (p1, p2) -> p2.age - p1.age);