organize/코딩테스트

자바 배열과 배열 정렬

001cloudid 2024. 12. 2. 15:04
728x90

 프로그래머스 Lv0 ~ Lv1을 풀면서 느낀 점은 배열 정렬을 자주 사용한다. 그만큼 배열 정렬은 다양한 상황(데이터 처리나 알고리즘 구현)에서 필요한 기능이다. 하지만 매번 헷갈려서 검색으로 해결했다. 그렇다 보니 한 번 풀고 나면 또 금방 잊어버리는 경우가 많았다. 매 번 검색하는 것도 번거롭고 내 나름대로 정리하고 이것을 머릿속에 넣어두기 위해 정리하고자 한다.

 

배열

자바에서 배열은 여러 종류로 나누어짐. 배열은 데이터를 연속적으로 저장하는 자료 구조로, 특정한 데이터 타입에 맞춰 고정된 크기를 가짐. 배열의 종류로는 기본 배열(문자 배열, 객체 배열), 다차원 배열(2차원 이상 배열), 가변 배열이 있음.

 

1. 기본 배열

단일 데이터 타입(int, char, String 등)의 값들을 하나의 배열로 저장. 배열의 크기는 고정되며 선언 시 배열의 크기를 지정

public class 배열 {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5}; //배열 선언과 초기화
        
        // 배열 출력
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
    }
}

 

2. 다차원 배열

배열의 배열로, 여러 개의 1차원 배열을 요소로 가진 배열. 2차원 이상 배열을 의미.

public class 이차원배열 {
    public static void main(String[] args) {
        // 2차원 배열 선언 및 초기화
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // 2차원 배열 출력
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

 

public class 삼차원배열 {
    public static void main(String[] args) {
        // 3차원 배열 선언 및 초기화
        int[][][] cube = {
            {{1, 2}, {3, 4}},
            {{5, 6}, {7, 8}}
        };
        
        // 3차원 배열 출력
        for (int i = 0; i < cube.length; i++) {
            for (int j = 0; j < cube[i].length; j++) {
                for (int k = 0; k < cube[i][j].length; k++) {
                    System.out.print(cube[i][j][k] + " ");
                }
                System.out.println();
            }
        }
    }
}

 

3. 가변 배열(ArrayList)

배열 크기를 동적으로 변경할 수 있는 배열 형태. 내부적으로 배열을 사용하지만, 배열의 크기가 자동으로 증가하거나 감소하는 기능을 제공

import java.util.*;

public class 가변배열 {
    public static void main(String[] args) {
        // ArrayList 선언
        ArrayList<Integer> numbers = new ArrayList<>();
        
        // 값 추가
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        
        // 출력
        for (int num : numbers) {
            System.out.println(num);
        }
    }
}

 

Arrays 클래스

배열을 다룰 때 자주 사용되는 메소드들은 Arrays 클래스에 有. 배열 정렬, 검색, 복사, 비교 등의 작업을 효율적으로 처리할 수 있음

 

1. 배열 길이

배열의 길이(배열의 요소 개수)를 구하려면 length 속성을 사용. 배열의 크기는 고정되므로, 배열이 생성된 후 변경할 수 없음

※ length와 length() 차이

length와 length() 차이

 

2. 배열 복사( Arrays.copyOf(), System.arraycopy() )

import java.util.Arrays;

public class ArrayCopyEx {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};
        int[] copy = Arrays.copyOf(original, original.length);  // 배열을 동일한 크기로 복사
        
        System.out.println("복사된 배열: " + Arrays.toString(copy));  // [1, 2, 3, 4, 5]
    }
}

 

public class SystemArrayCopyEx {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};
        int[] copy = new int[5];
        
        // System.arraycopy(원본 배열, 원본 시작 인덱스, 복사 배열, 복사 시작 인덱스, 복사할 길이)
        System.arraycopy(original, 0, copy, 0, original.length);
        
        System.out.println("복사된 배열: " + Arrays.toString(copy));  // [1, 2, 3, 4, 5]
    }
}

 

※ 배열을 부분적으로 복사( Arrays.copyOfRange() )

import java.util.Arrays;

public class 배열부분적복사 {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5};
        
        // 배열의 2번째부터 4번째까지 복사
        int[] copied = Arrays.copyOfRange(original, 1, 4);
        
        System.out.println("복사된 배열: " + Arrays.toString(copied));  // [2, 3, 4]
    }
}

 

3. 배열 정렬( Arrays.sort() )

숫자, 문자, 문자열 유니코드 순서대로 오름차순 정렬

import java.util.Arrays;

public class 배열정렬 {
    public static void main(String[] args) {
        int[] numbers = {5, 3, 8, 1, 2};
        
        // 배열 오름차순 정렬
        Arrays.sort(numbers);
        
        System.out.println("정렬된 배열: " + Arrays.toString(numbers));  // [1, 2, 3, 5, 8]
    }
}

 

4. 배열 역순 정렬( Arrays.sort() + Collections.reverseOrder() )

import java.util.Arrays;
import java.util.Collections;

public class 내림차순정렬 {
    public static void main(String[] args) {
        Integer[] numbers = {5, 3, 8, 1, 2};  // Integer 객체 배열
        Arrays.sort(numbers, Collections.reverseOrder());  // 내림차순 정렬
        
        System.out.println("내림차순 정렬된 배열: " + Arrays.toString(numbers));  // [8, 5, 3, 2, 1]
    }
}

 

5. 배열 비교 ( Arrays.equals() )

배열이 동일한 값을 가지고 있는지 확인할 수 있음

import java.util.Arrays;

public class 배열내용비교 {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {1, 2, 3};
        
        // 배열 내용 비교
        boolean isEqual = Arrays.equals(arr1, arr2);
        
        System.out.println("배열이 같은가? " + isEqual);  // true
    }
}

 

6. 배열을 문자열로 변환 ( Arrays.toString() )

import java.util.Arrays;

public class 배열을문자열로변환 {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        // 배열을 문자열로 변환
        String arrayStr = Arrays.toString(numbers);
        
        System.out.println("배열을 문자열로 변환: " + arrayStr);  // [1, 2, 3, 4, 5]
    }
}

 

7. 배열 검색 ( Arrays.binarySearch() )

정렬된 배열에서 특정 값을 검색할 때 사용. 반드시 정렬이 되어 있어야함. 이진 탐색을 기반

import java.util.Arrays;

public class 배열검색 {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        // 이진 탐색
        int index = Arrays.binarySearch(numbers, 3);
        
        System.out.println("값 3의 인덱스: " + index);  // 2
    }
}

 

함께 볼만한 자료 : https://velog.io/@dlzlqlzl/Java-ArrayList-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-%EC%98%A4%EB%A6%84%EC%B0%A8%EC%88%9C-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%EC%A0%95%EB%A0%AC

728x90