
해시데이터의 추가와 삭제를 효율적으로 수행할 수 있는 방법String 기반으로 정보를 기록하고 관리할 때 사용1. 전화번호부와 같음2. key가 String인 경우가 대부분3. put / get / getOrDefault해시법 (hashing)데이터를 저장할 위치(인덱스)를 간단한 연산으로 구현하는 것표에 정리한 값을 해시 값(hash value)이라고하며, 데이터에 접근할 때 사용해시 테이블의 요소 = 버킷인덱스012345678키 값56142029343751-해시 값56522716-해시값 = 각 요소의 값을 배열의 사이즈로 나눈 나머지 변경인덱스012345678키 값1-3729--145134-키 값2--20--56--더보기기존의 배열에 값을 추가하는 방법1. 이진검색법으로 삽입할 위치 조사2. 그 위치..

트리 비선형구조 그래프는 사이클이 있고, 트리는 사이클이 존재하지 않음 계층 관계를 나타내는 자료구조 트리는 저장위치를 찾아서 저장해야 하고, 삭제시 트리의 일부를 재구성해야하므로 링크드 리스트보다 추가/삭제 시간이 더 걸리는 대신 배열이나 링크드 리스트에 비해 검색과 정렬 기능이 더 뛰어남 용어 노드(node) 마디 A, B, C, D, E, F, G 간선(edge) 가지, 링크 루트(root) 트리의 가장 윗부분에 위치하는 노드 A 리프(leaf) 단말 노드(terminal node) 바깥 노드(external node) 트리의 가장 아랫부분(가장 마지막)에 위치하는 노드 D, E, F, G 간 노드(non-terminal node) 안쪽 노드 루트 포함, 리프가 아닌 노드 A, B, C 자식(chi..

DATE_FORMAT date 타입을 원하는 형식의 문자열로 변환할 수 있는 함수 SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS DATE FROM DUAL; Date and Time Format Specifiers 문서 https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format Specifier Description %a Abbreviated weekday name (Sun..Sat) %b Abbreviated month name (Jan..Dec) %c Month, numeric (0..12) %D Day of the month with English suffix (0th, 1..

DAO Data Access Object 데이터베이스의 data에 접근하기 위한 객체, 데이터베이스의 통신 데이터베이스에 접근하기 위한 로직을 분리하기 위해 사용 Repository DTO & VO DTO Data Transfer Object Table 계층 간 데이터 교환을 하기 위해 사용하는 객체 Entity 비슷하지만 목적 자체가 전달이므로 일회성으로 사용되는 성격이 강함 로직을 가지지 않는 순수한 데이터 객체 - getter & setter만 가진 클래스 (setter 있으면 가변 객체) DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바뀌어 오고 가는 것 setter의 경우 변조 가능성이 있으므로 생성자로 값을 넣어주면 변조 불가능하게 만듦 (불변..

Priority Queue큐의 구조인 FIFO를 가지면서 데이터가 들어온 순서로 나가는 것이 아닌,우선 순위를 먼저 결정해서 그 우선 순위가 높은 데이터가 먼저 나가는 자료구조내부 요소는 힙으로 구성되어 이진트리 구조로 이루어짐시간 복잡도는 O(NlogN)선언, 사용import java.util.PriorityQueue;import java.util.Collections;//낮은 숫자 기준인 우선순위 큐, 오름차순PriorityQueue priorityQueueLow = new PriorityQueue();//높은 숫자 기준인 우선순위 큐, 내림차순PriorityQueue priorityQueueHigh = new PriorityQueue(Collections.reverseOrder());//String..

문제 push 후 github 확인시 bin 폴더의 파일까지 올라가 버림 Binary file not shown. 이라고 뜸 해결 1. .git - info 폴더에 attributes 파일 생성 후 2. 다음 내용 적어주기 *.java diff *.js diff *.pl diff *.txt diff *.ts diff *.html diff 참고 https://github.com/GitbookIO/git/blob/master/ko/5df2cd67efa240af8f2f5c58c0e09464/55e30ce39d9fcc439dd09c25fcfe8815.md GitHub - GitbookIO/git: ProGit Book Fork generated using GitBook ProGit Book Fork genera..

Enum 관련된 상수들을 묶어 놓은 것 java에서는 타입이 안전한 열거형을 제공 - 컴파일 시간에 타입 체크를 받으므로, 이는 런타임 시에 발생하는 오류를 줄여줌 정의, 사용 enum 열거형이름 { 상수명1, 상수명2, ... } enum Direction { EAST, SOUTH, WEST, NORTH } class Unit { int x, y; //유닛의 위치 Direction dir; //열거형을 인스턴스 변수로 선언 void unit { dir = Direction.EAST; //유닛의 방향을 EAST로 초기화 } } switch ~ case 사용 public enum Direction { BASKETBALL, SOCCER, BASEBALL, TENNIS, SWIMMING, MARATHON } ..

리스트 - 데이터를 순서대로 나열해 놓은 자료구조 선형 리스트 배열로 선형 리스트 구현시 다음 노드 꺼내기 순서대로 데이터가 저장되어 있기 때문에 1만큼 큰 인덱스를 갖는 요소에 접근 노드의 삽입, 삭제 삽입, 삭제 시 다음의 모든 요소를 하나씩 뒤로 밀거나 앞으로 당겨야 함 선형 리스트 장점 1. 구조가 간단 2. 데이터를 읽어오는데 걸리는 시간이 가장 빠름 선형 리스트 단점 1. 쌓이는 데이터의 크기를 미리 알아야 함 2. 밀거나 당겨야 하기 때문에 효율이 좋지 않음 연결 리스트 - 포인터 연속된 노드의 결정체 자신과 같은 자료형의 인스턴스를 가리킴, 자기 참조(self-referential)형 클래스형 변수인 data는 데이터 그 자체가아니라 데이터에 대한 참조 꼬리 노드의 뒤쪽 포인터 값을 nul..

셸 정렬 단순 삽입 정렬의 장점은 살리고, 단점을 보완하여 좀 더 빠르게 정렬 장점: 정렬을 마쳤거나 마친 상태에 가까우면 속도가 빨라짐 단점: 삽입할 위치가 멀리 떨어져 있으면 이동해야 하는 횟수가 많아짐 정렬할 배열의 요소를 그룹으로 나눠 각 그룹별로 단순 삽입 정렬 수행 ▶ 그룹을 합치면서 정렬 반복(이동 횟수 줄임) i = 8일 때 j = 4-4 = 0인데 조건으로 j >= 0이 가능하게 만들어줌으로써 구간이 [4] ~ [12]까지로 바뀌고 계속 반복 실행 static void shellSort(int[] a, int n) { //n = 배열의 길이 for(int term = n/2; term > 0; term /= 2) { //{8, 1, 4, 2, 7, 6, 3, 5} 일 때 h = 8, 4,..

Database cheat sheet https://cheatography.com/tag/database/ 55 Database Cheat Sheets - Cheatography.com: Cheat Sheets For Every Occasion 55 Database Cheat Sheets Related tags: SQL Development Data Server MySQL cheatography.com limit 몇 개의 행을 반환할 것인지 제한하는 구문 MySQL, postgreSQL 사용 가능 select 컬럼명 from 테이블명 limit 개수; select 컬럼명 from 테이블명 limit offset, 개수; --offset은 0부터 시작 distinct 중복제거 하는 구문 MySQL, Ora..

재귀어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적(recursive)이라고 함이게 안되면 디바이드 앤 컨커, 다이나믹 프로그래밍 다 안됨재귀호출: 자기 자신과 똑같은 메서드를 호출선언적 프로그래밍(declarative programming) = 목적만 설정해 주면 중간 과정은 컴퓨터가 알아서 함: 언제 종료하고, 이 문제를 어떤 식으로 정의 할 수 있는가 명시직접(direct) 재귀: 자신과 같은 메서드 호출간접(indirect) 재귀: 메서드 a가 메서드 b를 호출, 다시 메서드 b가 메서드 a를 호출재귀함수를 짜는 법1. 종료 조건2. 문제의 정의팩토리얼음이 아닌 정수의 팩토리얼1. 0! = 1 2. n > 0 이면 n! = n * (n-1)!재귀 메서드 호출 stat..

진법 변환진수는 8비트 기준으로 1, 2, 4, 8, 16 ... 배수로 나타냄2진수: 11011000 = 1 + 2 + 8 + 16 = 2716진수: 2진수에서 4개를 묶어서 읽기, 0 ~ 9 ABCdef 로 표현 00000110 = 2 + 4 = 0610진수숫자2진수0B 붙임8진수0 붙임16진수0x 붙임10진수 ▶ n진수//1. 10진법 ▶ 3진법 String a = ""; //값을 더해주려고 while(n > 0) { //n이 0보다 클때까지 반복 a = (n % 3) + a; //문자열 앞에 3으로 나눴을때 나머지를 더해줌 n /= 3; //반복하기 위해 n을 3으로 나눠줌 } //2. Integer.toString(문자열,..