본문 바로가기

(18)
Heap 힙이란, 특정한 규칙을 만족하도록 구성된 이진 트리이다. 힙의 대소관계 규칙 부모 노드가 항상 자식 노드보다 크거나 같다 (자식 노드 index = 부모 노드 index / 2 (+1)) 즉, 가장 큰 원소는 항상 힙의 루트에 있다. 힙의 모양 규칙 마지막 레벨을 제외한 모든 레벨에 노드가 꽉 차 있어야 한다 마지막 레벨에 노드가 있을 때는 항상 가장 왼쪽부터 순서대로 채워져 있어야 한다 이러한 특성 덕분에 힙은 최대 원소를 빠르게 찾을 수 있다 6개의 정수를 저장하는 힙의 예 16 삽입 삭제 * 대소관계 규칙을 반대로 적용하면 최소 원소를 빠르게 찾을 수 있다 연산을 편하게 하기 위해서 0번에는 최소 혹은 최대값을 넣어주고 1번부터 값을 채운다 public abstract class Heap { fin..
순열 (java) - ex) 0 ~ 9로 구성된 정수 list를 가지고, 만들 수 있는 모든 숫자 구하기 (list에 중복된 숫자가 있으므로 결과에도 중복이 발생할 수 있다) public class Main { public static void main(String[] arg) { List number = Arrays.asList(1, 2, 3, 3, 2, 1); for (int i = 1; i
MySQL - 날짜 함수 출처 : https://jang8584.tistory.com/7 dayofweek(date), weekday(date) 날짜를 몇 번째 요일인지를 나타내는 숫자로 리턴 dayofweek : 일요일(1), 월요일(2), ..., 토요일(7) weekday : 월요일(0), 화요일(1), ..., 일요일(6) dayofmonth(date) 그 달의 몇 번째 날인지를 리턴 (일자 리턴) dayofyear(date) 한 해의 몇 번째 날인지 리턴 (1~366) ex) select dayofyear('2020-02-01'); -> 32 month(date) 해당 날짜가 몇 월인지 리턴 week(date) 해당 날짜가 몇 번째 주인지를 리턴 (0~52) year(date) 년도를 리턴 (1000~99..
MySQL - group by, having GROUP BY절 데이터들을 원하는 그룹으로 나눌 수 있다 나누고자 하는 그룹의 컬럼명을 SELECT 절과 GROUP BY 절 뒤에 추가하면 된다 보통 집합 함수(aggregate function)와 함께 사용 (AVG, SUM, COUNT 등) HAVING GROUP BY 결과에 조건을 붙이고 싶을 때 사용 (GROUP BY의 WHERE 절) example 동물 종류별로 각각 몇 마리인지 조회하기 SELECT ANIMAL_TYPE, COUNT(*) AS COUNT FROM ANIMALS GROUP BY ANIMAL_TYPE;3마리 이상인 동물 종류 조회하기 SELECT ANIMAL_TYPE FROM ANIMALS GROUP BY ANIMAL_TYPE HAVING COUNT(*)>=3;
자바 (작성중) 상속 관점에서 생성자를 private로 선언하면 어떤 효과? 자바의 finally 블록은 try-catch-finally의 try 블록 안에 return 문을 넣어도 실행? final, finally, finalize 의 차이? 자바 generic과 C++ template의 차이? TreeMap, HashMap, LinkedHashMap의 차이, 언제 무엇을 사용하는 것이 좋은지 예를 들어서.. 자바의 객체 리플렉션 (object reflection) 이 무엇이고, 유용한 이유는? Country라는 클래스에 getContinent(), getPopulation() 메서드가 있다. 대륙의 이름과 국가의 리스트가 주어졌을 때 주어진 대륙의 총 인구수를 계산하는 메서드 getPopulation(List cou..
C++ - next_permutation #include void nextPermutaionTest(vector data) { sort(data.begin(), data.end()); do { ///// 데이터 처리 /////// } while (next_permutation(data.begin(), data.end())); } 이런 식으로 쓰면 된다 (iterator 대신 배열 주소 넣어도 됨)
프로그래머스 - SQL 연습 출처 : 프로그래머스 - 코딩테스트 연습 NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL_TYPE VARCHAR(N) FALSE DATETIME DATETIME FALSE INTAKE_CONDITION VARCHAR(N) FALSE NAME VARCHAR(N) TRUE SEX_UPON_INTAKE VARCHAR(N) FALSE [ANIMAL_INS 테이블 구조] Q1. 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성 SELECT * FROM ANIMAL_INS ORDER BY ANIMAL_ID; Q2. 동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 ANIMAL_ID 역순으로 조회하는 SQL문을 작성 SELEC..
분할 정복 (병합정렬, 퀵정렬) 분할 정복 (Divide & Conquer) 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산 => 빠르게 작업을 처리할 수 있다 divide : 문제를 더 작은 문제로 분할하는 과정 merge : 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정 base case : 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제 example : 1 + 2 + ... + n int sum(int n) { // 기저 사례 if (n == 1) return 1; if (n % 2 == 1) return sum(n-1) + n; // 홀수일 경우 처리 방법 return 2*sum(n/2) + (n..