Java/Java 실습
-
[Java실습] 하노이 탑Java/Java 실습 2022. 7. 24. 19:08
하노이 탑은 n개의 원반을 start(A)부터 via(B)를 통해, end(C)까지 옮기는 알고리즘입니다. 하노이 탑에 대한 코드입니다. import java.util.ArrayList; import java.util.Scanner; public class TowerOfHanoi { public static int count = 0; public static ArrayList arraylist = new ArrayList(); public static void hanoi(int n, int start, int end, int via) { if(n == 1) {// 이동할 원반의 수가 1개 count++; arraylist.add(start + " " + end);// 시작 -> 목표 } else { ha..
-
[Java 실습] 셸 정렬(Shell Sort)Java/Java 실습 2022. 7. 18. 16:38
셸 정렬은 단순 삽입 정렬의 장점을 살리고, 단점을 보완하여 좀 더 빠르게 정렬하는 알고리즘입니다. 다음은 셸 정렬을 오름차순으로 정렬한 코드입니다. 마지막 1-정렬은 삽입 정렬과 다르지 않습니다. public class shellSort { static void shellSort(int[] arr) { // 4-정렬, 2-정렬, 1-정렬 범위를 정해줌 // 마지막 1-정렬은 삽입 정렬(insertion sort)과 같음 for(int i=arr.length/2; i>0; i/=2) { for(int j=i; j=0 && arr[k]>temp; k-=i) { arr[k+i] = arr[k]; } arr[k+i] = temp; } } } public static void main(String[] args)..
-
[Java 실습] 단순 삽입 정렬(Straight Insertion Sort)Java/Java 실습 2022. 7. 18. 14:40
단순 삽입 정렬은 선택한 요소를 더 앞의 알맞은 위치에 삽입하는 작업을 반복하여 정렬하는 알고리즘입니다. 단순 삽입 정렬을 오름차순으로 정렬한 코드입니다. public class InsertionSort { static void insertionSort(int[] a) { for(int i = 1; i < a.length; i++) { // 두 번째부터 비교 for(int j = 0; j < i; j++) { if(a[i] < a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } public static void main(String[] args) { int [] arr = new int[] {8,2,4,5,7,9}; insertionSort(arr);..
-
[Java 실습] 버블 정렬(Bubble Sort)Java/Java 실습 2022. 7. 18. 13:29
버블 정렬은 이웃한 두 요소의 대소 관계를 비교하고 필요에 따라 교환을 반복하는 알고리즘입니다. 다음은 버블 정렬을 내림차순으로 정렬한 코드입니다. public class BubbleSort { static void swap(int[] a, int i1, int i2) { int n = a[i1]; a[i1] = a[i2]; a[i2] = n; } static void bubbleSort(int [] a) { for(int i=0; i
-
[Java 실습] BFS(너비 우선 탐색) 미로 탐색(큐)Java/Java 실습 2022. 7. 15. 21:24
map : 길 = 0, 갈수 없는 길(벽) = 1 visited 배열을 통해 들렸던 길은 다시 들리지 않는다. (boolean으로 판단) 현재 인덱스를 저장하는 Index 클래스를 매개변수로 받아 Way() 메서드를 통해 상하좌우를 검색하고 그 값을 offer한다. offer한 인덱스를 poll하고, 위치를 변경한다. 언제까지? 탈출 (4,4) 할때까지. import java.util.LinkedList; import java.util.Queue; public class BfsQueue { // 인덱스를 저장해주는 큐 static Queue qQueue = new LinkedList(); // 들린 곳을 체크해줌 static boolean [][] visited = new boolean[5][5]; //..
-
[Java 실습] DFS(깊이 우선 탐색) 미로 탐색(스택)Java/Java 실습 2022. 7. 15. 21:03
map : 길 = 0, 갈수 없는 길(벽) = 1 visited 배열을 통해 들렸던 길은 다시 들리지 않는다. (boolean으로 판단) 현재 인덱스를 저장하는 Index 클래스를 매개변수로 받아 Way() 메서드를 통해 상하좌우를 검색하고 그 값을 push한다. push한 인덱스를 pop하고, 위치를 변경한다. 언제까지? 탈출 (4,4) 할때까지. import java.util.Stack; public class DfsStack { // 인덱스를 저장해주는 스택 static Stack sStack = new Stack(); // 들린 곳을 체크해줌 static boolean [][] visited = new boolean[5][5]; // 길=0, 벽=1 static int[][] map = { {0,..
-
[Java 실습] 스택 후위 표기 계산기Java/Java 실습 2022. 7. 14. 22:43
중위 표기 계산기를 후위 표기 계산기로 바꾸기 1. Stack 직접 구현 2. Collection Stack 사용 1. 스택 직접 구현 input => 113 + 11 - (32 - (9 - 2 + 6)) output => 113 + 11 - (32 - (9 - 2 + 6)) = 105 StringUtils.inNumeric( )은 매개변수가 숫자인지 아닌지 boolean값으로 리턴해줍니다. StringUtils는 https://commons.apache.org/proper/commons-lang/download_lang.cgi 에서 다운 받아 사용 가능합니다. package Stack1; // 거의 대부분의 문자열 처리를 수행 // 파라미터 값으로 null을 주더라도 절대 NullPointExcepti..