본문 바로가기

알고리즘 자료구조

[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (2) 3. 하노이의 탑 이런 식으로 원반 위에 원반이 쌓여있는 탑을 맨 끝에 있는 기둥으로 옮기는 문제가 하노이의 탑이다. 맨위의 원반을 1, 가운데를 2, 마지막을 3이라고 가정하고 위의 과정을 조금 축소시켜서 말해보면 1) (1,2)를 Pole2로 옮긴다 2) (3)을 Pole3으로 옮긴다. 3) (1,2)를 Pole3으로 옮긴다. 고 생각할 수 있다. 원반이 몇 개가 쌓여있는 같은 과정으로 처리하면 된다. 이걸 재귀로 해결할 수 있는데, 코드로 표현해보면 아래와 같이 작성할 수 있다. static void move(int no, int x, int y){ //no = 원반 개수, x = 시작하는 기둥 번호, y = 맨 마지막 기둥 번호 if(no>1){ move(no-1,x,6-x-y); //no = 3.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 5. 재귀 알고리즘 (1) 1. 재귀 알고리즘의 기본 1-1. 재귀란? 어떤 사건이 자기 자신을 포함하고 있거나 자기 자신을 사용해 정의하고 있을 때 재귀적이라고 한다. 1-2. 팩토리얼 구하기 팩토리얼(n!)은 1부터 n까지의 수를 모두 곱한 값을 구하는 것이다. 만약 5!을 한다면 5*4*3*2*1 = 120의 결과값이 나와야한다. 재귀를 이용해 팩토리얼을 구하는 함수는 다음과 같다. static int factorial(int n){ if(n==1){ return 1; } return n*(factorial(n-1)); } 만약 n이 1과 같으면 1을 반환시키고, 그렇지 않을 경우에는 n*을 factorial(n-1)과 계속 곱해주어 팩토리얼의 결과값을 반환시킬 수 있게 한다. 1-3. 유클리드 호제법 두 정수의 최대공약수를.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 4. 스택과 큐 스택, 큐는 이전에 간단하게 정리해둔 필기가 있어서 기본적인 건 그걸로 대체하고 추가로 내가 모르는 부분만 작성하기루 절대 귀찮은거 아님!!!!!!! 1. 스택 2. 큐 2-1. 배열로 큐 만들기 2-2. 링 버퍼로 큐 만들기 배열 요소를 앞쪽으로 옮기지 않는 큐를 구현하기 위해 사용하는 자료구조가 링버퍼이다. 약간 초등학생때 짜던 방학 계획표처럼 동그라미 안에서 첫 값과 마지막 값이 연결되어있는 구조라고 생각하면 된다. 맨 첫값과 끝 값을 논리적으로 구분하기 위해 사용하는 것이 프론트, 리어이다. 링 버퍼를 통한 큐의 인큐, 디큐는 시간복잡도 O(1)이 된다. 링버퍼를 사용해 큐를 구현하면 아래와 같이 구현할 수 있다. public class IntQueue { private int[] queue; /.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 3. 검색 알고리즘(2) 3. 이진 검색 3-1. 이진 검색 알아보기 이진검색은 배열이 오름차순이나 내림차순으로 정렬되어있을 때 데이터를 찾기 위해 사용하는 알고리즘이다. 배열이 오름차순으로 정렬되어있는 경우에는 다음과 같이 데이터를 찾으면 된다. 1) 배열의 중앙값과 찾고자 하는 데이터 비교 2) 중앙값보다 데이터가 작으면 중앙값 이전 부분에서 검색 수행 3) 중앙값보다 데이터가 크면 중앙값 이후 부분에서 검색 수행 배열이 내림차순일 경우에는 중앙값과 비교하는 부분은 동일하게 수행하고, 남은 두 단계는 반대로 수행해주면 된다. 기존 검색 알고리즘보다 검색 수행 속도가 절반으로 줄기 때문에 시간복잡도는 O(logN)이 된다. 오름차순으로 정렬된 배열을 이진검색하는 코드를 작성하면 아래와 같다. static int binSearc.. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 3. 검색 알고리즘(1) 1. 검색 알고리즘이란? 1-1. 검색과 키 살펴보기 - 키값을 지정하는 방법 1. 키값과 일치하도록 지정 2. 키값의 구간을 지정 3. 키값과 비슷하도록 지정 4. 조건은 N개 이상으로 지정 가능 1-2 배열에서 검색하기 배열 내에서 찾고자 하는 데이터를 검색한다. 관련 알고리즘은 아래와 같다. 1. 선형 검색 : 무작위로 늘어있는 배열에서 검색 2. 이진 검색 : 일정한 규칙으로 늘어있는 배열에서 빠르게 검색 수행 3. 해시법 : 추가, 삭제가 자주 일어나는 배열에서 빠르게 검색/ 수행 2. 선형 검색 2-1. 선형 검색 알아보기 위에서 말한 것 처럼 선형검색은 무작위로 늘어있는 배열에서 찾고자 하는 데이터를 검색하는 것이다. 좀 더 이해하기 쉽게 표현하면 아래와 같다. 요걸 코드로 표현하면 아래와 .. 더보기
[자료구조와 함께 배우는 알고리즘 입문] 1. 기본 알고리즘 1. 알고리즘이란? 1-1 세 값의 최댓값 구하기 public class Max3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int max = a; if(max 더보기

728x90