코테

(코테) [Java] 그래프 만들기

그린티_ 2025. 6. 5. 10:43
반응형

전제 파악 먼저

질문 예시인 1 3, 2 6은 아래 중 어떤 걸 의미할 수 있음

문제에서 보면 한번 갔다가 다시 돌아오는 경우나 한번만 가고 끝나는 경우가 있을 수 있음

그래서 문제를 어떻게 풀어야하는지 잘 확인해 보아야함

해석 의미  예시
방향 없음 (무방향 그래프) 1 — 3, 2 — 6 친구 관계, 양방향 도로
방향 있음 (단방향 그래프) 1 → 3, 2 → 6 트리, 네트워크 흐름, 의존성
방향 + 가중치 있음 1 → 3 (가중치 w) 다익스트라, 벨만포드
방향 + 시간 / 비용 / 거리 2 → 6 (시간 5초) 백준 10282 해킹 문제

 

대표적인 그래프 표현 방식 2가지

1. 인접 리스트 (Adjacency List) ⭐ 가장 많이 씀

  • 정점 수가 많고 간선 수가 적을 때 유리 (희소 그래프)
  • 구현이 간결하고 공간 효율 좋음
List<Integer>[] graph = new ArrayList[N + 1];
for (int i = 1; i <= N; i++) {
    graph[i] = new ArrayList<>();
}
graph[1].add(3);
graph[2].add(6);

➕ 가중치도 넣고 싶다면?

List<int[]>[] graph = new ArrayList[N + 1];
// graph[from].add(new int[]{to, weight});
graph[1].add(new int[]{3, 5}); // 1 → 3 (가중치 5)

 

 

2. 인접 행렬 (Adjacency Matrix)

  • 정점 수가 적고, 간선이 많을 때 유리 (밀집 그래프)
  • 모든 노드 간 연결 상태를 빠르게 확인할 수 있음
int[][] graph = new int[N + 1][N + 1];
// 무방향 그래프라면
graph[1][3] = 1;
graph[3][1] = 1;

// 단방향 그래프라면
graph[2][6] = 1;

➕ 가중치도 넣을 수 있음

graph[2][6] = 7; // 2 → 6, 가중치 7

 

 

 

정리하자면?

목적  방식  추천 이유
일반적인 코딩 테스트, 경로 탐색 문제 인접 리스트 공간 효율 좋고 유연
간선에 가중치가 있음 (다익스트라 등) List<int[]>[] int[]{to, cost} 형태
노드 수가 작고, 연결이 빽빽함 인접 행렬 즉시 접근이 빠름
노드 번호가 비연속적임 Map 사용 가능 Map<Integer, List<...>>

 

반응형

'코테' 카테고리의 다른 글

(코테) [Java] BFS  (0) 2025.05.21
(코테) [Java] DFS  (1) 2025.05.20
(코테) [Java] 재귀  (1) 2025.05.20
(코테) [Java] Heap  (1) 2025.05.15
(코테) [Java] Deque  (0) 2025.05.15