[JAVA] ArrayList 2차원 배열과 정렬

유동우·2024년 2월 9일
0

자바 기본

목록 보기
4/4
post-thumbnail

자료구조를 복기하던 중 DFS를 구현하기 위한 방법에 스택과 이중 ArrayList가 있다는 것을 알게되었다.
이 두 방법은 사실상 같은 원리지만 코드상에서는 차이가 존재한다.

실제 코드를 구현할 때는 스택보다 이중 ArrayList를 더 많이 사용한다고 알고있고, 나는 이보다도 ArrayList 2차원 배열 코드를 사용해보았다.

아래 코드는 백준에서 DFS 문제 정답코드의 일부분이다.

public class Main{
  static boolean[] visited;
  static ArrayList<Integer>[] A;

    public static void main(String[] args) throws IOException {
      visited = new boolean[N + 1];
      A = new ArrayList[N + 1];
    }
    
    for (int i = 0; i < M; i++) {
        st = new StringTokenizer(br.readLine());
        int n1 = Integer.parseInt(st.nextToken());
        int n2 = Integer.parseInt(st.nextToken());
        A[n1].add(n2);
        A[n2].add(n1);
    }

    for (int i = 1; i <= N; i++) {
        Collections.sort(A[i]);
    }
}

방향성이 존재하지 않는 그래프이기 때문에
A[n1].add(n2);
A[n2].add(n1);
위처럼 두 정점의 ArrayList에 서로를 추가하였다.

이후 각 리스트마다의 요소를 오름차순 정렬하기 위해 Colletsions.sort를 사용했는데
이렇게 했을경우 정렬이 된것을 눈으로 확인하고 싶었다.

간선을 (1,4) (1,2) (2,3) (2,4) (3,4) 입력했을 경우

[2, 4] , [1, 3, 4] , [2, 4] , [1, 2, 3] , [ ]

로 잘 정렬이 되어 출력된것을 볼수있었다.

처음에는 첫 번째 for문에서 간선을 입력 받음과 동시에 하나의 간선에 두 개의 정점에 대해
각각 Collection.sort 를 했지만, 아래와 같이 for문을 따로 빼서 각 리스트의 시작점부터만 정렬을 해주면 자연스럽게 오름차순으로 방문할 수 있다는 것을 알 수 있었다.

profile
효율적이고 꾸준하게

0개의 댓글