[BOJ][Java] 1948번 임계경로
·
PS
문제 링크 : https://www.acmicpc.net/problem/1948 이 문제는 2가지를 구해야 하는 문제이다.첫 번째는 단순 위상정렬을 통해 도착지점까지 가장 오래 걸리는 경우가 몇인지를 구하면 되기 때문에비교적 간단하다. 두 번째가 이 문제의 핵심인데 가장 먼 거리를 이동하는 루트에 있는 도로의 개수를 구하는 문제이다.이것은 역방향 인접 그래프를 통해 해결할 수 있다. 우선 가장 기본이 되는 정방향 인접그래프를 구현한다.이때 노드와 노드 사이의 거리도 구해야 하기 때문에 새로운 클래스인Node 클래스를 만들어 목표 노드와 해당 노드까지의 거리를 나타내고이를 2차원 리스트에 저장하면 된다. 위의 정방향 인접 그래프를 위상정렬 알고리즘을 통해 구하면 위와 같이 2번 노드부터 7번 노드까지 임계..
[BOJ][Java] 2252번 줄 세우기
·
PS
문제 링크 : https://www.acmicpc.net/problem/2252 이 문제에서는 출력 조건에 답이 여러 가지인 경우에는 아무거나 출력한다는 것을 보고위상정렬 알고리즘을 사용한다는 것을 유추해 내면 이후에는 단순 알고리즘 구현문제로 바뀌게 된다. 먼저 위상정렬을 사용하려면 진입 차수에 대해 알아야 한다.진입 차수란 그래프로 표현했을때 자신에게 들어오는 간선의 개수이다.예제 입력 1번을 예로 살펴보면d (진입 차수 배열), List (인접 리스트)로 표현할 수 있다. 이때 위상정렬 알고리즘을 사용하려면 아래와 같이 하면 된다.Queue에는 진입 차수가 0인 정점들을 채워준다.이후 q에서 하나씩 빼면서 해당 정점을 출력해주고해당 정점과 인접한 정점의 진입 차수를 하나씩 빼준다. 1번 예제에서는 ..