티스토리 뷰

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

 

1240번: 노드사이의 거리

N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.

www.acmicpc.net

 

 

트리 구조이므로 사이클 없는 직선 거리 = 노드 사이의 거리 가 된다.

처음에는 플로이드-와샬 알고리즘을 적용하는 방식도 생각했지만, 이 알고리즘의 시간복잡도는 O(N^3)이고, N=1,000이므로 시간 초과가 발생함

 

따라서 각 노드에 대한 연결 리스트를 만들어 준 후, 다음의 bfs를 통하여 노드 사이의 거리를 구함

	private static int bfs(int n, int start, int end) {
		int cost = 0;

		boolean[] isVisited = new boolean[n + 1];
		Queue<int[]> queue = new LinkedList<>();
		isVisited[start] = true;
		queue.add(new int[] {start, 0});	//current vertex,  cost 저장
		while(!queue.isEmpty()){
			int[] currNode = queue.poll();
			int currVertex = currNode[0];
			int currCost = currNode[1];
			if (currVertex == end) {
				cost = currCost;
				break;
			}

			//연결 리스트를 통하여 다음에 방문할 노드를 queue에 삽입
			for (int i = 0; i < linkedlist[currVertex].size(); i++) {
				Edge nextEdge = linkedlist[currVertex].get(i);
				if (!isVisited[nextEdge.dest]) {
					queue.add(new int[] {nextEdge.dest, currCost + nextEdge.cost});
					isVisited[nextEdge.dest] = true;
				}
			}
		}
		return cost;
	}

 

 

 

👇 전체 풀이

https://github.com/kkj0419/code_test/pull/23

 

[2022.12.08] 1240 노드사이의 거리 by kkj0419 · Pull Request #23 · kkj0419/code_test

1240 노드사이의 거리 bfs(dfs도 가능), 트리 구조 플로이드 와샬로도 풀이 가능하겠다 생각했었는데, 시간 초과가 날 것 같음 !

github.com

 

'알고리즘 > 코테' 카테고리의 다른 글

[백준 16235] 나무 재테크  (0) 2022.12.22
[백준 2515] 전시장  (0) 2022.12.16
[백준 9997] 폰트  (0) 2022.10.27
[백준 11404] 플로이드 (보충하기/)  (0) 2022.07.20
[백준 1516] 게임 개발  (0) 2022.06.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함