자바/알고리즘
(6)
-
자바/알고리즘2023.12.25
정렬 알고리즘 구현해 보기
정렬 알고리즘을 구현해 봤다 버블, 셀렉, 삽입, 퀵, 병합, 힙 import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { int [] data = {3,5,2,1,7,9}; // 버블정렬(data); // 선택정렬(data); // 삽입정렬(data); // 퀵정렬(data); // 합병정렬(data); } /** * 버블 정렬을 구현해 봐요 * * 구현이 단순하나 O(N^2)로 비효율 적이에요 * * 안정정렬 이에요 (같은 값의 데이터의 순서는 유지되요) * * @Author Okane * @Param data 정렬을 수행 할 배열이에요 * @Return ..1 -
자바/알고리즘2023.09.20
인접행렬에 대한 고찰
이 그래프를 인접행렬로 나타내면 다음과 같다. 예를 들어 A -> B로 가는 방법은 1개이다. 그렇다면 A에서 두번 거쳐 B로 가는 방법은 몇개일까? (A-A-A), (A-B-A), (A-C-A)로 나타낼 수 있다. 신기하게도 이 인접행렬을 제곱하면 된다. (계산해보면 같다는걸 알 수 있음) 그럼 변 세 개를 거치는건? 인접행렬을 세제곱하면 된다! https://www.acmicpc.net/problem/12850 12850번: 본대 산책2 가능한 경로의 수를 1,000,000,007로 나눈 나머지를 출력한다. www.acmicpc.net 이문제를 풀어보면 알 수 있따.0 -
자바/알고리즘2023.09.20
TreeSet 클래스
TreeSet 미친 클래스인데 왜 이때까지 안씀? 이새끼는 HashSet과 마찬가지로 중복된 오브젝트를 제거해 줄 수 있다. 근데 미친게 정렬을 자동으로 해준다.(대신 IO에 시간이 많이 든다) 게다가 tailSet() 이나 headSet()이라는 메서드가 TreeSet 인스턴스의 부분집합을 리턴해줄 수 도 있다. 예를 들면 이렇다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.TreeSet; public class Main { public static void main(String[] args..0 -
자바/알고리즘2023.07.03
유니온 파인드에 대한 고찰
유니온 파인드에서 항상 놓치는 부분은 연결하는 두 노드가 주어질 때 두 노드의 루트 노드가 같지 않다면 한쪽 노드의 루트노드의 루트노드를 다른 루트노드로 만들어야 된다는 점이다. 이걸 잊고 한쪽 노드의 루트노드만 다른 루트노드로 바꾸게 되면 그 한쪽노드에서 루트노드로 이어지는 다른 노드들이 다른쪽 루트노드를 가르키지 못하게 된다 그림으로 표현하면 아래와 같다. 초기 상황이다. 4번노드가 3번노드와 이어저 4번노드의 루트 노드가 3이되었다. 2번노드와 3번노드가 이어져 3번노드의 루트노드가 2가되었다. 여기서 4번노드는 고려할 필요가 없다. 3번노드에서 루트로 올라가는 함수를 거칠때 3번노드의 루트노드가 이미 3번이었기 때문에 재귀가 끝나기 때문이다. 이 과정이 유니온 파인드의 핵심이다. 2-3-4의 꼬리..0
'자바/알고리즘' 카테고리의 글 목록
'자바/알고리즘' 카테고리의 글 목록