1. 점근적 분석(Asymtotic Analysis) 이란 임의의 함수가 N -> ∞ 일때, 어떤 함수 형태에 근접해지는지 분석하는 방법이다. 예를들어 f(n) = n2 + 3n 일때, n이 매우 커진다면, 3n은 n2에 비해서 중요도가 떨어진다. n이 매우 커진다면, "f(n) is asymptotic to n2" 라고 할 수 있다. 이 접근적 분석때문에 시간 복잡도 계산시 최고차항을 제외한 모든 항과 최고차항의 계수를 무시하는 것이다. 2. 점근 표기법(Asymtotic Notation) 점근 표기법에는 세 가지 표기법이 있다. (1) Big- omega (Ω): lower bound. 점근적 하한 (2) Big-O (O): upper bound. 점근적 상한 (3) Big-theta (Θ): tig..
1. Graph - graph is simply a set of values that are related in a pair wise fashion. - Node(=Vertex)와 Edges(간선)로 이루어짐. - great data structure to model real world relationships. - LinkedList는 Tree의 일종이고, Tree는 Graph의 일종이다. (Tree는 directed graph) - self-edge라고 node가 자기 자신을 가리키는 경우가 있을 수 있다. 2. Graph의 종류들 (1) directed : 방향성이 있음. 일방통행 (2) undirected : 방향성이 없음. 양방향 통행 (1) weighted : 가중치 그래프 (2) unweig..
1. 검색 알고리즘 일단 이 포스트에서 다룰 것은 a의 배열 검색이다. 배열 검색은 다음과 같은 알고리즘을 사용한다. (1) 선형 검색 (Linear Search) : 무작위로 늘어놓은 데이터 모임에서 검색을 수행한다. (2) 이진 검색 (Binary Search) : 일정한 규칙으로 늘어놓은 데이터 모음에서 아주 빠른 검색을 수행한다. (3) 해시법 : 추가, 삭제가 자주 일어나는 데이터 모임에서 아주 빠른 검색을 수행한다. 2. 선형 검색 ( ==순차검색 ) 배열에서 검색하는 방법 가운데 가장 기본적인 알고리즘이다. 요소가 직선 모양으로 늘어선 배열에서의 검색은 원하는 키 값을 갖는 요소를 만날때 까지 맨 앞부터 순서대로 요소를 검색한다. (기본적으로 n(배열길이) for문 돌면서 키 값 요소와 비교..
1. 정렬이란? 정렬은 이름, 학번, 키 등 핵심 항목의 대소 관계에 따라 데이터 집합을 일정한 순서로 줄지어 늘어서도록 바꾸는 작업을 말한다. 이렇게 정렬하면 검색을 더 쉽게 할 수 있다. (파일을 알파벳 순으로 정렬하고 찾으면 더 찾기 쉬운것 처럼) 또한 정렬시에 같은 값의 키를 가진 요소의 순서가 정렬 전후에도 유지되는것을 안정된 정렬이라고 하고, 안정되지 않은 알고리즘을 사용하면 같은 키를 가진 요소의 순서가 정렬 전후에 유지 되지 않는다. 2. 외부 정렬과 내부 정렬 (1) 내부 정렬 : 정렬할 모든 데이터를 하나의 배열에 저장 할 수 있는 경우에 사용하는 알고리즘 (2) 외부 정렬 : 정렬할 데이터가 너무 많아 하나의 배열에 저장할 수 없는 경우에 사용하는 알고리즘 3. 버블 정렬 (Bubbl..
1. Stack이란 스택은 데이터를 일시적으로 저장하기 위해 사용하는 자료구조로, 데이터의 입력과 출력 순서는 LIFO(Last In, First Out)이다. 스택에 데이터를 넣는 작업을 push라고 하고, 스택에서 에이터를 꺼내는 작업을 pop이라고 한다. 스택의 가장 윗부분(push와 pop을 하는)을 top이라고 하고, 스택의 가장 아랫부분을 bottom이라고 한다. Stack은 자리 이동이 없고 순차적으로 데이터를 추가하고 삭제하기 때문에 ArrayList와 같은 배열기반의 컬렉션 클래스를 통해 구현하는 것이 적합하다.. (1) Stack의 예시 : 자바 프로그램에서 메소드를 호출하고 실행하는 프로세스 익히 잘 알고 있는 Call stack의 과정이다. void x() {/* ... */} vo..
1. java.util 패키지의 유용한 클래스 (1) java.util 패키지의 Objects 클래스 (java.lang 패키지의 Object 클래스와 유의) - Math 클래스 처럼 모든 클래스가 static. 객체의 비교나 null check에 유용함. - Objects.isNull(obj)이나 Objects.nonNull(obj) 같이 해당 객체가 null인지 아닌지를 boolean 값으로 반환함. - Objects.requireNonNull()은 해당 객체가 null이 아니여야 하는 경우에 사용. null이면 NPE 발생. Parameter 2개 쓰면 (obj, String예외 메세지) 순으로 예외메세지 설정가능. 아래 처럼 매개변수 null check 유효성 검사시 간단히 가능. import j..
프로그래머스 1단계들을 다 풀어간다. 사실 뒷부분으로 갈수록 너무 쉬워지고 있다. 빨리 스프링 프로젝트가 끝나고 알고리즘 학습을 하고 싶다. 1. array를 복사할때는 객체와 같아서 그냥 변수에 넣어 주면 안된다. 1) Arrays.copyOf() 사용 2) System.arraycopy() 사용 3) arr.clone() 사용 (2차원 배열에서도 사용) 2. 정수인지 유리수인지 판별하기 위해서 num % 1 == 0 을 사용 할 수 있음. ex ) 제곱수인지 판별 : Math.sqrt(num) % 1 == 0 ? "제곱수" : "제곱수아님" 3. 2차원 배열 (Matrix)에서, arr이 2차원 배열이라고 할때, arr.length 하면 element의 개수가 아니라 row의 개수가 나온다. arr[..
1. List (arrayList)를 int 배열로 변경하는 방법 list.stream().mapToInt(Integer::intValue).toArray(); Integer배열을 int로 바꿔주는것은 stream을 이용해야한다. 2. List (arrayList)를 String 배열로 변경하는 방법 // list를 string array로 바꾸는 두가지 방법. 1. stream.toArray(Sting[]::new) 2. list.toArray(new String[0]); String[] strings = stringList.toArray(new String[0]); String[] strings2 = stringList.stream().toArray(String[]::new); 위 코드에서 좀 이상한..
- Total
- Today
- Yesterday