PS(Java)

    [PS] 인프런 강의 - Graph 2. 경로 탐색(인접 행렬)

    [PS] 인프런 강의 - Graph 2. 경로 탐색(인접 행렬)

    사실 인접행렬 방법은 정점 개수가 많아지면 메모리 낭비도 되고 시간 복잡도도 길어지므로, 인접리스트로 푸는 게 좋다. 문제 방향그래프가 주어지면 1번 정점에서 N번 정점으로 가는 모든 경로의 가지 수를 출력하는 프로그램을 작성하세요. (한번 방문한 노드는 다시 방문할 수 없습니다) 위 그래프에서 1번 정점에서 5번 정점으로 가는 가지 수는 1 2 3 4 5 1 2 5 1 3 4 2 5 1 3 4 5 1 4 2 5 1 4 5 총 6 가지입니다. ▣ 입력설명 첫째 줄에는 정점의 수 N(1

    [PS] 인프런 강의 - Graph 1. 그래프와 인접행렬

    [PS] 인프런 강의 - Graph 1. 그래프와 인접행렬

    그래프 종류 1. 무방향 그래프 인접행렬 입력값 : a b 1 2 1 3 2 4 2 5 3 4 행-> 열 로, 갈 수 있다면 값1 을 집어넣는다. 1 2 3 4 5 1 0 1 1 0 0 2 1 0 0 1 1 3 1 0 0 1 0 4 0 1 1 0 0 5 0 1 0 0 0 graph[a][b] = 1; graph[b][a] = 1; 2. 방향 그래프 인접행렬 입력값 : a b 1 2 1 3 2 5 3 4 4 2 1 2 3 4 5 1 0 1 1 0 0 2 0 0 0 0 1 3 0 0 0 1 0 4 0 1 0 0 0 5 0 0 0 0 0 graph[a][b] = 1; 3. 가중치 방향 그래프 인접행렬 ex) 비용 입력값 : a b c 1 2 2 1 3 4 2 5 5 3 4 5 4 2 2 1 2 3 4 5 1 ..

    [PS] 인프런 강의 - Tree 5. Tree 말단 노드까지의 가장 짧은 경로

    [PS] 인프런 강의 - Tree 5. Tree 말단 노드까지의 가장 짧은 경로

    문제 아래 그림과 같은 이진트리에서 루트 노드 1에서 말단노드까지의 길이 중 가장 짧은 길이를구하는 프로그램을 작성하세요. 각 경로의 길이는 루트노드에서 말단노드까지 가는데 이동하는 횟수를 즉 간선(에지)의 개수를 길이로 하겠습니다. 가장 짧은 길이는 3번 노느까지의 길이인 1이다. 풀이 위 그림과 달리 예를 들어 노드 3이 왼쪽 자식만 가지고 있다고 할 때는 DFS로 풀기에 제약이 있다. (왼쪽, 오른쪽 자식으로 뻗는다는 가정이 있기 때문에) DFS 코드 (자식 하나만 가지는 노드가 있으면 에러남) import java.util.Scanner; class Node{ int data; Node lt; Node rt; public Node(int val) { data = val; lt = rt = null..

    [PS] 인프런 강의 - Tree 4. 송아지 찾기 (BFS)

    [PS] 인프런 강의 - Tree 4. 송아지 찾기 (BFS)

    문제 현수는 송아지를 잃어버렸다. 다행히 송아지에는 위치추적기가 달려 있다. 현수의 위치와 송아지의 위치가 수직선상의 좌표 점으로 주어지면 현수는 현재 위치에서 송아지의 위치까지 다음과 같은 방법으로 이동한다. 송아지는 움직이지 않고 제자리에 있다. 현수는 스카이 콩콩을 타고 가는데 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다. 최소 몇 번의 점프로 현수가 송아지의 위치까지 갈 수 있는지 구하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 현수의 위치 S와 송아지의 위치 E가 주어진다. 직선의 좌표 점은 1부터 10,000 까지이다. ▣ 출력설명 점프의 최소횟수를 구한다. 답은 1이상이며 반드시 존재합니다. ▣ 입력예제 1 5 14 ▣ 출력예제 1 3 ▣ 입력예제 2 8 3 ..

    [PS] 인프런 강의 - Tree 3. 이진트리 순회(넓이우선탐색 BFS : 레벨탐색)

    [PS] 인프런 강의 - Tree 3. 이진트리 순회(넓이우선탐색 BFS : 레벨탐색)

    문제 아래 그림과 같은 이진트리를 레벨탐색 연습하세요. 레벨 탐색 순회 출력 : 1 2 3 4 5 6 7 풀이 레벨에 따라 노드는 다음과 같이 나뉜다 0 : 1 1 : 2 3 2 : 4 5 6 7 큐를 사용하여 푼다. 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Node{ int data; Node lt, rt; public Node(int val) { data = val; lt = rt = null; } } public class Main { //레벨 탐색 public static void BFS(Node root) { Queue Q = new LinkedList(); Q.offer(root..

    [PS] 인프런 강의 - Tree 2. 부분집합 구하기 (DFS)

    [PS] 인프런 강의 - Tree 2. 부분집합 구하기 (DFS)

    문제 자연수 N이 주어지면 1부터 N까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 자연수 N(1

    [PS] 인프런 강의 - Tree 1.이진트리 순회(깊이우선탐색 DFS)

    [PS] 인프런 강의 - Tree 1.이진트리 순회(깊이우선탐색 DFS)

    문제 아래 그림과 같은 이진트리를 전위순회와 후위순회를 연습해보세요. 전위순회 출력 : 1 2 4 5 3 6 7 중위순회 출력 : 4 2 5 1 6 3 7 후위순회 출력 : 4 5 2 6 7 3 1 풀이 생략 코드 import java.util.Scanner; class Node{ int data; Node lt, rt; public Node(int val) { data = val; lt = rt = null; } } public class Main { //전위 순회 public static void DFS(Node root) { if(root == null) return; else { System.out.print(root.data + " "); DFS(root.lt); DFS(root.rt); } }..