본문 바로가기
정렬 (ORDER BY) ORDER BY 열명 DESC : 내림차순 ORDER BY 열명 ASC : 오름차순 ASC, DESC 지정하지 않은 경우 디폴트는 ASC(오름차순)이다. 대소관계 문자열형 데이터는 사전식 순서로 대소관계를 결정한다. (abc, ㄱㄴㄷ 순) 수치형과 문자열형은 대소관계 비교 방법이 다르다. 예} a(VARCHAR형) b(INTEGER형) 1 1 2 2 10 10 11 11 이와 같은 테이블이 있다고 하자. SELECT * FROM table ORDER BY a; 결과 a(VARCHAR형) b(INTEGER형) 1 1 10 10 11 11 2 2 SELECT * FROM table ORDER BY b; 결과 a(VARCHAR형) b(INTEGER형) 1 1 2 2 10 10 11 11 a열은 VARCHAR형.. 2021. 12. 3.
테이블에서 데이터 검색 (SELECT, DESC, WHERE, AND, OR , NOT, LIKE) SELECT 구로 열 선택 WHERE 구로 행 선택 DESC는 테이블에 어떤 열이 정의되어있는지 확인 문자열형과 날짜시간형 상수는 ' ' (싱글쿼트)로 감싸 표기 NULL값 검색은 IS NULL을 사용 AND는 OR보다 우선 순위가 높다 LIKE LIKE 술어를 사용하면 열 값이 부분만 일치하는 경우도 참이된다. (=연산자는 열 값이 완전히 일치할 때만 참) 패턴에 사용하는 메타문자 % , _ %는 임의의 문자열과 매치되고, 빈 문자열에도 매치된다. (_는 임의의 문자 하나) 예) WHERE 열명 LIKE '패턴'; % 문자 자체 검색 -> \% _ 문자 자체 검색 -> \_ ' 문자 자체 검색 -> '' 이스케이브 방법으로 처리 간단한 패턴이라면 LIKE를 쓰지만 복잡할 경우에는 정규 표현식(Regul.. 2021. 12. 3.
(Java) 백준 5639 : 이진 검색 트리 풀이1 : Tree, Node 클래스 생성하여 postorder메소드 재귀적으로 구현 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Tree { Node root; Tree() { this.root = null; } public void insert(int key) { root = insertNode(root, key); } private Node insertNode(Node node, int key) { Node newNode = new Node(key, null, null); if(node==null) { return newNode; } else { if(node.keyk.. 2021. 11. 30.
자바 기본 - 다형성 다형성은 하나의 타입에 대입되는 객체에 따라서 실행 결과가 다양한 형태로 나오는 성질을 의미한다. 부모 타입에 어떤 자식 객체를 대입하느냐에 따라 실행 결과가 달라지고, (상속) 인터페이스 타입에 어떤 구현 객체를 대입하느냐에 따라 실행 결과가 달라진다. (인터페이스) 상속은 말 그대로 같은 종류의 자식(하위)클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이다. 2021. 11. 29.
자바 기본 - 인터페이스 인터페이스는 데이터를 저장할 수 없다. 따라서 런타임에 데이터를 저장할 수 있는 필드(인스턴스 필드, 정적 필드)를 선언할 수 없다. 대신 런타임 시 데이터 값이 고정되는 상수 필드는 선언할 수 있다. 단, 상수 선언 시에는 반드시 초기화해야 한다. 디폴트 메소드는 인터페이스에서 선언/구현되는 메소드지만, 실제로는 해당 인스턴스를 구현하는 모든 객체가 갖고 있는 인스턴스 메소드라고 생각해야 한다. 인터페이스에서 구현까지 하는 메소드기 때문에 추가하더라도 구현 클래스에서 에러가 발생하지 않는다. 그리고 필요하다면 구현 클래스에서 그대로 사용해도 되고, 오버라이딩해서 사용할 수도 있다. 2021. 11. 29.
자바 Queue에서 비슷한 메서드 자바에서 자료구조 Queue를 구현해 데이터를 추가/삭제/검색할 때 일어나는 문제 상황에서 예외를 발생시키냐, null 또는 false등의 값을 리턴하냐에 따른 메서드가 따로 있다. 예외 값 리턴 추가 add() offer() 삭제 remove() poll() 검색 element() peek() 예를 들어. 데이터를 추가할 때 꽉찬 상황이라면 add()일 땐 예외를 발생시키고, offer()일 땐 실패를 의미하는 false 값을 리턴한다. 출처 : https://goodteacher.tistory.com/112 2021. 11. 25.
카운팅 정렬 (도수 정렬, 계수 정렬) 요소의 대소 관계를 판단하지 않고 정렬하는 알고리즘 시간복잡도는 일단 O(N)이다. 뒤에서부터 진행하면 안정적이다. 중간에 도수분포표/누적도수분포표에 해당하는 배열을 새로 사용해야 한다. 그리고 배열의 요소값의 범위에 따라 해당 배열의 길이가 달라진다! 즉, 정렬하는 요소수는 적은데 요소값의 범위가 엄청 크다면, 극단적으로 엄청난 메모리가 낭비된다. 2021. 11. 20.
병합 정렬 요소가 2개 이상인 경우, 1. 앞 부분을 병합 정렬한다. 2. 뒷 부분을 병합 정렬한다. 3. 앞 부분과 뒷 부분을 병합한다. 추가 공간을 필요로 하기 때문에 제자리 정렬이 아니다. 안정적이다. 이진트리로 대입해서 생각해보면, 이진트리의 높이, 즉, 반으로 나눗 횟수, 다시 병합할 횟수, stage 수 등등 -> logN 어느 한 레벨에서 노드 2^M개, 한 노드에 있는 요소수 N*(1/2)^M개이므로 한 레벨에서 비교에 대한 복잡도는 O(2^M * N*(1/2)^M) -> O(N)이다. 따라서 O(NlogN)의 시간복잡도를 가진다. 2021. 11. 20.
힙 정렬 힙 자료구조를 활용해서 정렬하는 알고리즘 힙 자료구조는 우선순위가 가장 높은 요소가 맨 위 루트노드로 온다. 이를 배열로 구현하면 가장 앞 인덱스의 요소에 우선순위가 가장 높은 요소 (최소값, 최대값 등등)가 위치한다. (오름차순) 최대값이 루트가 되게끔 배열로 구현하면 맨 앞 인덱스에 요소의 최대값이 위치한다. 이를 맨 마지막 요소와 교환한다. 최대값이 맨 마지막 인덱스에 위치했으므로 해당 요소는 더 이상 신경쓰지 않아도 된다. 그리고서, 맨 마지막 요소를 제외한 나머지 배열을 다시 힙 자료구조에 맞게 배치한다. 나머지 배열 중 맨 앞 인덱스와 맨 마지막 인덱스 요소끼리 교환한다. 위와 같은 과정을 반복하면 된다. 안정적이지 않다. 1 사이클 돌 때 완전이진트리의 깊이만큼만 비교하면 되기 때문에 O(l.. 2021. 11. 19.
셸 정렬 삽입 정렬의 장단점을 보면, 장점 : 거의 정렬은 마친 상태에서는 속도가 굉장히 빠르다. 단점 : 타겟 요소가 이전 요소들(정렬된)보다 작으면 이동하는 횟수가 많아진다. 셸 정렬은 단점을 보완하고 장점을 살리기 위해 고안된 정렬 알고리즘이다. 삽입 위치가 멀 경우, 한 칸씩 비교하면서 교환하는 것이 오래 걸리기 때문에, 일정 간격으로 띄엄띄엄 비교/교환을 한다는 아이디어다. 그리고 이 간격을 줄여가다보면 정렬이 완료될 것이다. 1. 얼만큼 띄어가면서 검사할 지 간격을 정한다. 2. 해당 간격만큼 요소들을 띄워 묶어서 그룹 별로 나눈다. 3. 나눈 그룹 별로 각자 삽입 정렬을 한다. 4. 적당한 간격으로, 적당한 횟수만큼 진행하여 거의 정렬된 배열을 만든다. 5. 최종적으로 1을 간격으로 하여 삽입 정렬을.. 2021. 11. 19.