전체 글100 [Java] Graph (Adjacency Matrix, Adjacency List) 정점(Vertex)과 간선(Edge)로 구성된 것, Graph(G) = (Vertex(V), Edge(E)) Graph 용어 정점(Vertex) - 노드, 특정할 수 있는 실체간선(Edge) - 정점 간 이어져 있는 선가중치(Weight) - 정점 간에 거리, 비용 (간선의 길이라고 생각해도 좋음)경로(Path) - 출발 정점에서 도착 정점까지의 거쳐 간 순서순환(Cycle) - 경로의 출발 정점과 도착 정점이 같은 경우차수(Degree) - 정점에 붙은 간선 수진입 차수(In-Degree) - 정점으로 들어오는 간선 수진출 차수(Out-Degree) - 정점에서 나가는 간선 수Graph 종류 유향 그래프(Directed Graph) - 특정 정점에서 특정 정점으로 이동하는 그래프무향 그래프(UnDire.. 2024. 7. 9. 백준 - [BOJ 22856] 트리 순회 문제노드가 N개인 이진 트리가 있다. 트리를 중위 순회와 유사하게 순회하려고 한다. 이를 유사 중위 순회라고 하자.순회의 시작은 트리의 루트이고 순회의 끝은 중위 순회할 때 마지막 노드이다. 이때 루트 노드는 항상 1번 노드이다.유사 중위 순회는 루트 노드에서 시작하며, 다음과 같이 진행된다.현재 위치한 노드의 왼쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 왼쪽 자식 노드로 이동한다.그렇지 않고 현재 위치한 노드의 오른쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 오른쪽 자식 노드로 이동한다.그렇지 않고 현재 노드가 유사 중위 순회의 끝이라면, 유사 중위 순회를 종료한다.그렇지 않고 부모 노드가 존재한다면, 부모 노드로 이동한다.유사 중위 순회를 종료할 때까지 1 ~ 4를 반복한다.위 그림에 있.. 2024. 7. 8. [Java] Binary Tree Binary Tree는 트리를 통해 데이터를 비선형적으로 관리하는 자료구조이다.앞서 포스팅에서 BST(Binary Search Tree)에 대해서 설명했는데 BST도 이진 트리를 기반한 자료구조이다. 왜 Binary Tree를 사용할까?Tree Post에서도 설명했는데 일반 DAG와 같은 Tree는 효율성 측면에서 너무 부족하다. 그저 Graph와 다름이 없다.그래서 실제 데이터 처리를 하기 위해 Binary Tree로 효율성을 극대화하는 방법을 채택한 것이다. 크게 Binary Tree의 두 종류를 알아보자. 1. 완전 이진 트리2. 편향 트리 이 외에도 많지만 Binary Tree의 핵심을 설명하기에 두 가지가 최고인 것 같다. 위 두가지 개념을 언급한 이유는 BST의 문제점 때문이다.앞서 작성한 B.. 2024. 7. 8. [Java] Binary Search Tree 앞 포스팅에서 작성한 Tree의 비효율적인 문제를 개선하기 위해 생긴 이진 탐색 트리다.트리는 여러 자식을 가질 수 있지만 이진 검색 트리에서는 Binary Tree의 개념을 사용하기 때문에자식이 Left, Right만 존재한다. 이를 통해 Log_2 (N) 번만에 모든 수행을 끝낼 수 있다. 또, inorder를 수행 시 오름차순 정렬된 결과를 얻을 수 있다. package com.study.datastructrue.nonlinear.binarysearchtree;public class Node { int value; Node left; Node right; public Node(int value) { this.value = value; left = null;.. 2024. 7. 8. [Java] Tree 트리 자료구조의 종류 : Tree, Binary Tree, Binary Serach Tree, Balanced Binary Serach Tree, Heap, Trie이번 포스트에서는 기본적인 Tree에 대해서만 작성해보자. Tree란 ? Node와 Edge로 구성된 방향이 존재하는 비순환 Graph의 한 종류이다. 그래서 DAG(Directed Acyclic Graphs)라고도 한다.그럼 Graph로 분류하면 되지 왜 Tree냐는 의심을 하게 된다.Tree는 Graph에서 몇가지 특성을 더 가진다. 1. 루트 노드가 하나 존재한다.2. 부모 노드는 하나밖에 존재하지 않는다.3. 노드는 0개 이상의 자식을 가지고 있다.4. 자식이 0개인 경우 단말노드(Leaf Node)라고 한다.5.. 위 특성을 지키는 .. 2024. 7. 7. 백준 - [BOJ 1865] 웜홀 문제때는 2020년, 백준이는 월드나라의 한 국민이다. 월드나라에는 N개의 지점이 있고 N개의 지점 사이에는 M개의 도로와 W개의 웜홀이 있다. (단 도로는 방향이 없으며 웜홀은 방향이 있다.) 웜홀은 시작 위치에서 도착 위치로 가는 하나의 경로인데, 특이하게도 도착을 하게 되면 시작을 하였을 때보다 시간이 뒤로 가게 된다. 웜홀 내에서는 시계가 거꾸로 간다고 생각하여도 좋다.시간 여행을 매우 좋아하는 백준이는 한 가지 궁금증에 빠졌다. 한 지점에서 출발을 하여서 시간여행을 하기 시작하여 다시 출발을 하였던 위치로 돌아왔을 때, 출발을 하였을 때보다 시간이 되돌아가 있는 경우가 있는지 없는지 궁금해졌다. 여러분은 백준이를 도와 이런 일이 가능한지 불가능한지 구하는 프로그램을 작성하여라.입력첫 번째 줄에는.. 2024. 7. 6. [최단경로] Bellman-Ford Algorithm 최단경로 알고리즘package com.study.datastructrue.mst;import java.util.ArrayList;import java.util.Arrays;class Pair { T node; V cost; public Pair(T node, V cost) { this.node = node; this.cost = cost; }}public class BellmanFord { static long[] dist = new long[6]; public static void main(String[] args) { // 집 1, 학교 2, 박물관 3, 영화관 4, 마트 5 ArrayList>> graph = inpu.. 2024. 7. 6. Java Fast I/O 3 (feat. BOJ, String, StringBuilder) 앞선 포스트와 마찬가지로 사람들은 PS에서 속도를 개선하기 위한 방법 중 하나로 StringBuilder를 사용한다. StringBuilderabstract sealed class AbstractStringBuilder implements Appendable, CharSequence permits StringBuilder, StringBuffer { byte[] value; byte coder; boolean maybeLatin1; int count; private static final byte[] EMPTYVALUE = new byte[0]; AbstractStringBuilder() { value = EMPTYVALUE; } .. 2024. 7. 6. Java Fast I/O 2 (feat. BOJ, StringTokenizer, String.split()) 이번 포스트에는 StringTokenizer에 대해 작성해보려고 합니다.PS에서 어떻게든 속도를 조금 더 높여보려고 사람들이 여러 방법을 사용하죠?그 중 하나가 StringTokenizer 입니다. 정말 StringTokenizer의 성능이 그렇게 우수할까? 직접 테스트 해봤습니다.package com.study.datastructrue.string;import java.util.StringTokenizer;public class DevidePerformTest { public static void main(String[] args) { String str = "one two three four five one two three four five one two three four five.. 2024. 7. 6. 이전 1 2 3 4 5 6 7 ··· 12 다음