99클럽 코테 스터디 4일차 TIL

2024. 10. 31. 19:42·코딩테스트/99클럽 4기

백준 - 24479번

문제 이해

  • N개의 정점, M개의 간선으로 구성된 무방향 그래프
  • 모든 간선의 가중치는 1이다.
  • 인접 정점은 오름차순으로 방문한다.

한 줄마다 입력된 u v 정점은 양방향 간선을 가진다.

첫 번째 u v 입력을 보면, 정점 1은 정점 4를 방문할 수 있고, 정점 4 또한 정점 1을 방문할 수 있다.

 

예제 입력을 그림과 표로 나타내보자.

시작 정점 방문할 수 있는 정점
1 2, 4
2 1, 3, 4
3 2, 4
4 1, 2, 3
5 0

시작 정점들에 대한 인접 리스트를 만들고, 각 정점이 방문할 수 있는 정점 번호들을 리스트에 넣는다.

정점 번호가 작은 순서대로 탐색하기 위해 리스트 안의 정점들을 오름차순으로 정렬한다.

그리고 시작 정점(r)에서부터 DFS를 수행하여 방문 순서를 기록한다.

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {

    static ArrayList<Integer>[] graph; // 정점의 인접 리스트
    static int[] visited; // 방문 노드
    static int root = 1;

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        int r = sc.nextInt();

        // 그래프 초기화
        graph = new ArrayList[n + 1];
        visited = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            graph[i] = new ArrayList<>();
        }

        // 간선 입력
        for (int i = 0; i < m; i++) {
            int u = sc.nextInt();
            int v = sc.nextInt();
            graph[u].add(v);
            graph[v].add(u);
        }

        // 정점 번호가 작은 순서로 방문하기 위해 정렬
        for (int i = 1; i <= n; i++) {
            Collections.sort(graph[i]);
        }

        // 깊이 우선 탐색
        dfs(r);

        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            sb.append(visited[i]).append("\n");
        }
        System.out.print(sb);
    }

    static void dfs(int node) {
        visited[node] = root++;

        for (int nextNode : graph[node]) {
            if (visited[nextNode] == 0) {
                dfs(nextNode);
            }
        }
    }
}

그래프를 이중 배열로도 구현할 수 있다.

이중 배열의 경우, 초기화할 때 배열의 크기를 정해줘야 하며, 모든 정점 간의 연결을 저장하기 위해 n * n의 크기가 필요하다.

만약 정점의 수가 많고, 연결되는 간선이 적은 경우 불필요하게 DFS를 수행하게 되고 많은 메모리를 사용하게 된다.

이중 배열은 모든 간선이 연결되어 있는 경우에 효율적이다.


백준 24479번 알고리즘 수업 - 깊이 우선 탐색 1

https://www.acmicpc.net/problem/24479

저작자표시 (새창열림)

'코딩테스트 > 99클럽 4기' 카테고리의 다른 글

99클럽 코테 스터디 6일차 TIL  (0) 2024.11.02
99클럽 코테 스터디 5일차 TIL  (0) 2024.11.01
99클럽 코테 스터디 3일차 TIL  (0) 2024.10.30
99클럽 코테 스터디 2일차 TIL  (0) 2024.10.29
99클럽 코테 스터디 1일차 TIL  (0) 2024.10.28
'코딩테스트/99클럽 4기' 카테고리의 다른 글
  • 99클럽 코테 스터디 6일차 TIL
  • 99클럽 코테 스터디 5일차 TIL
  • 99클럽 코테 스터디 3일차 TIL
  • 99클럽 코테 스터디 2일차 TIL
tjdgus
tjdgus
  • tjdgus
    Do It...
    tjdgus
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Language
        • Java
      • CS
        • Data Structure
        • OS
        • Algorithm
        • Network
      • 오류 모음집
      • ETC
      • 함수형 프로그래밍
      • JPA
      • Toy
      • 데이터베이스
      • Spring
      • 코딩테스트
        • 99클럽 4기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    99클럽
    오블완
    코딩테스트준비
    항해99
    TiL
    개발자취업
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
tjdgus
99클럽 코테 스터디 4일차 TIL
상단으로

티스토리툴바