본문 바로가기
Club/99클럽 코테 스터디 2기

99클럽 코테 스터디 25일차 TIL 2차원 배열 동적 할당

by ʚ⇜❅🎕̈❄⇝ɞ 2024. 6. 13.
728x90
반응형

2차원 배열 동적 할당하는 방법

  • n은 row의 크기, m은 col의 크기라고 하자.
  • n은 알지만 m의 크기는 정해지지 않았을 때, 2차원 배열에 값을 할당하는 과정에서 문제가 생겼다.
  • m의 크기가 정해져 있을 때는 

 

  • 1. int[][] graph = new int[n][]; (처음 접근한 방법)
    • m의 크기가 정해져 있지 않은 상황에서는 사용할 수 없었다.
    • 장점
      • access 속도가 빠르고, 메모리 효율이 좋다.
      • 기본형 배열이므로 타입 안정적이다.
    • 단점
      • 동적으로 크기를 조정할 수 없다.
      • m을 미리 초기화해야 한다.

 

int[][] graph = new int[n][];
for (int i = 0; i < n; i++) {
    graph[i] = new int[m];
}

 

  • 2. List<List<Integer>> graph = new ArrayList<>();
    • 리스트의 타입으로 Integer 리스트를 넣는 경우
    • 장점
      • m의 크기를 동적으로 설정가능하고, m을 미리 초기화하지 않아도 된다.
      • 제네릭 타입을 사용하므로 타입 안정적이다.
    • 단점
      • 대용량 데이터의 경우 배열에 비해 메모리 및 속도에서 불리하다.
      • 리스트의 내부 구현 때문에 추가적인 메모리 오버헤드가 발생할 수 있다.

 

int[][] graph = new int[n][];
for (int i = 0; i < n; i++) {
    graph[i] = new int[m];
}

 

  • 3. ArrayList<Integer>[] graph = new ArrayList[n];
    • ArrayList <Integer>을 타입으로 하는 1차원 배열
    • 장점
      • m의 크기를 동적으로 설정가능하다.
    • 단점
      • 모든 행을 초기화해야 한다.
      • 경우에 따라 타입 캐스팅이 필요할 수 있다.
ArrayList<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) {
    graph[i] = new ArrayList<>();
}

 

728x90

느낀 점

  • 2차원 배열의 m의 크기를 동적으로 설정할 수 없다는 것, C와 Python은 되기에..
  • ArrayList<Integer>[] 이렇게 선언할 때는, List<Integer>[] 는 쓸 수 없다.

다음에 학습할 것

  • int와 int[]의 차이
반응형

코테에 자주 사용될 것으로 예상되므로 각 방법의 장단점을 알고 있자.

728x90
반응형

댓글