본문 바로가기

알고리즘 && 자료구조13

백준 2606 - BFS(Breadth-First-Search) BFS의 대표적인 문제이다. 개념만 이해하고 있다면 간단하게 이해하고 풀수있는 수준이다. 문제 https://www.acmicpc.net/problem/2606 해설 public class P_2606 { private int node[][]; private int check[]; private int bfs(int start) { Queue que = new LinkedList(); int dap =0; que.offer(1); while(!que.isEmpty()) { int val = que.poll();//값을 꺼낸다. check[val] = 1; //확인한 값은 배열에 담아둔다. for (int i = 0; i < node.length; i++) { if(node[val][i] == 1 && c.. 2020. 6. 8.
퀵 정렬( Quick Sort ) 알고리즘 public class QuickSortTest { private void quickSort2(int[] arr, int start, int end) { int part2 = partition(arr , start , end); //분할 if(start < part2 -1 ) { quickSort2(arr, start, part2-1); } if(part2 < end) { quickSort2(arr, part2, end); } } private int partition(int[] arr, int start, int end) { int pivot = arr[(start + end) / 2]; while(start pivot) { end--; } if(start 2020. 6. 4.
FOR문을 재귀함수로 변환 int[] data = {7, 5, 6, 1, 9}; 이러한 배열을 더할때 for문을 쓰지 않고 모두 더하려면 재귀함수를 호출해야 한다. 처음 의식의 흐름대로 이렇게 하면 되겠지 하면서 풀었는데 반복문을 빠져 나가면서 다시 반대로 더했던 값이 처음으로 돌아가는 현상이 일어났다... 이런 현상을 막기위해서는 return 할때 값을 더해줘야 해결될꺼라는 생각에 다시 재귀함수를 만들었다. -처음 재귀함수 public static int sumFuc(int[] data, int total, int cnt){ if(data.length > cnt ){ total += data[cnt]; //System.out.println("함수가 호출 전 : " + cnt + "/"+ total); sumFuc(data,tot.. 2020. 6. 2.
자바 - DFS(Depth First Search) 구현 1.이해 예를 들어서 미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이곳으로부터 다른 방향으로 다시 탐색을 진행하는 방법과 유사하다. 모든 노드를 방문하고자 하는 경우에 DFS 알고리즘을 이용하면 된다. 또한 검색 속도 자체는 너비 우선 탐색(BFS)에 비해서 다소 느리다. 그림과 같이 12에서 13 -> 12로 돌아와 가지 않았던 길이 있는지 파악후 14로 이동한다. 2.구현코드 일단 정점과 간선을 표현해야 한다. 대표적으로 2가지 방법이 존재한다. 인접행렬 - 2차원 배열로 표현 인접리스트 - 배열안에 list 만들어 표현 우리가 구현한 소스에서는 인접리스트로 만들어 볼것이다. 노드를 구성하는 코드 class Graph{ .. 2020. 4. 21.