[데이터베이스] 22. 외부 정렬
·
CS/기초데이터베이스
데이터베이스에서는 다양한 이유로 레코드를 정렬해야 할 때가 있다. - order by 와 같은 SQL을 처리해야 할 수도 있고- 트리 인덱스에 데이터를 많이 넣고자 할 때도 정렬이 필요하고- projection 연산 결과로 중복을 제거할 때도 정렬이 유용하며- 조인을 구현할 때 정렬을 사용하여 조인할 수도 있다. 우리가 흔히 쓰는 정렬 알고리즘은 in place 방식이라고 하더라도 O(N)의 공간복잡도가 필요하다.하지만 요즘 메인 메모리의 크기가 점점 늘어나고는 있음에도 처리해야 할 데이터는 너무 많아서 메인 메모리만으로는 모든 데이터를 한번에 정렬할 수 없다.그렇다고 디스크를 메모리처럼 보고 정렬하기에는 너무 많은 입출력 비용이 발생하기 때문에 디스크 접근 비용을 최소화하면서 적은 메모리로 데이터를 정..
[데이터베이스] 21. 질의 수행 (Query Plan)
·
CS/기초데이터베이스
SQL 문장을 실제로 컴퓨터가 실행할 때는 어떤 과정으로 실행될까?먼저 SQL은 확장된 형태의 관계 대수로 변환된다.그리고 이 관계 대수식을 기반으로 '질의 처리 계획'을 만드는데, 이는 관계 대수 연산자를 노드로 하는 트리로 표현된다.트리의 각 노드에는 해당 연산자가 어떤 알고리즘을 사용할 것인지 표시하는 라벨이 있다.이렇게 관계 대수 연산자는 질의 수행의 기본 단위가 되며, 이 연산자들의 동작을 구현하는 것은 최대 성능을 위해 최적화 되어 있다. 시스템 카탈로그DBMS가 쿼리를 처리할 때, 어떻게 처리할 지 결정하는 과정에서 테이블의 구조와 인덱스 등의 데이터를 참고한다.이 정보는 '시스템 카탈로그'라는 특별한 '테이블' 에 저장된다. (데이터 딕셔너리, 카탈로그라고 부르기도 한다.)실제 테이블 데이..
[LG CNS] 2025 동계 인턴 (DX Core) 서류 & 코테 합격 후기
·
자기계발/대외활동
자소서  모집 기간 : 2024-10-28 09:00 ~ 2024-11-11 18:00  자소설 닷컴 구경하다가 우연히 3학년도 지원 가능한 인턴을 발견해서 지원했다.기간이 넉넉하긴 했는데, 여유부리다가 마감 당일 학교 가면서 버스랑 지하철에서 지원서를 작성했다..다행히 대기업 지원 자소서를 몇 번 읽어본 적이 있어서 어떤 식으로 써야할 지 감은 왔는데, 문항이 500자라서 내용을 줄이느라 힘들었다. 1번 문항 = 전공 관련 학습 경험 (500자)2번 문항 = 지원 동기 & 입사 후 이루고 싶은 목표 (500자)3번 문항 = 전공 성적 나열 (1000자) 1번은 전공 / 알고리즘 / 개발(프로젝트) 3가지로 분류해서 작성했고,2번은 LG CNS 사이트 찾아보니 Mu Career Up (MCU) 라고 부서..
[프로그래머스] 도넛과 막대 그래프 (2024 KAKAO WINTER INTERNSHIP)
·
알고리즘 (PS)/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/258711 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 생각보다 재미있게 푼 그래프 문제백준 티어로 치면, 골드5 정도 될 것 같다. 막대 그래프 = 1자로 연결된 트리도넛 그래프 = 사이클 1개인 그래프8자 그래프 = 사이클이 2개인 그래프 이때 각각의 그래프를 식별할 수 있는 특징을 잡아내면 된다. 막대 그래프는 사이클이 없다.도넛 그래프는 사이클이 존재하며, 모든 정점의 out degree 가 1개이다.8자 그래프는 사이클이 존재하며, 1개 정점의 out degree = 2, 나머지 정점의 ..
[데이터베이스] 20. 해시 기반 인덱스
·
CS/기초데이터베이스
해시 기반 인덱스해시 기반 인덱스는 등호 조건 조회에 최적화된 인덱스 기법이다.(범위 조건 조회에는 사용할 수 없다. 탐색 키가 일 때, a >= 10 과 같은 질의를 수행하려면 10, 11, 12, .. 를 모두 해싱해야 하며, a = 10 에 대해서도 b, c 를 임의의 값을 모두 지정해서 해싱해야 하기 때문이다.반면 a = 1, b = 2, c = 3 과 같이 조건이 명확할 때는 매우 빠르게 원하는 데이터를 찾아낼 수 있다. 정적 해싱 정적 해싱 기반의 인덱스는 primary bucket page 와 overflow page 로 구성된다.하나의 인덱스 파일은 0 ~ N-1 까지의 고정된 크기의 버켓으로 이루어지며, 처음에는 버켓 당 하나의 기본 페이지만 존재한다.버켓은 데이터 엔트리를 갖고 있고,..
[백준] 1166 - 선물
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/1166 이분탐색 심화 개념을 사용해야 하는 문제.. (나도 알고 싶지 않았다)문제 자체는 간단하다.어떤 정육면체 N개를 W*H*L 직육면체 안에 넣고자 할 때, 이 정육면체의 한변의 길이를 최대한 늘리는 것이 문제 풀이이다.단순히 직육면체와 같은 부피를 갖는 N개 정육면체에 대한 한변 길이 구하기로는 풀 수 없다. 극단적으로 얇은데 큰 직육면체를 생각하면 된다. (1 x 10억 x 10억) 내가 맨 처음 생각한 풀이는 (알고보니 정해였지만) 이분탐색이다.주어진 직육면체의 세 변 중 가장 짧은 변의 길이를 반씩 나누면서 그 변의 길이를 정육면체의 변의 길이로 할 때 N개 이상의 상자를 담을 수 있는지 계산하는 것이다. s = 0, e = min(W..
[백준] 4315 - 나무 위의 구슬 (Python)
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/4315 재미있는 트리 연습 문제아이디어 + 구현 모두 깐깐한 문제였다.각 노드가 갖고 있는 구슬 개수가 모두 1개가 되도록 할 때 구슬을 옮기는 최소 횟수를 구하는 문제이다. 내가 생각한 풀이 흐름은 다음과 같다. 1. 전체 트리를 DFS 돌면서 현재 자신을 root 로 하는 서브트리에 대해 이 서브 트리가 가지고 있는 모든 구슬의 개수, 필요한 구슬의 개수를 구한다. 만약 가지고 있는 구슬이 필요한 구슬보다 많다면, 그 차이를 return 하여 부모 노드로 여분 구슬을 넘긴다. DFS 실행이 끝나면 모든 노드는 자신을 루트로 하는 서브트리 모두를 채울 수 있도록 딱 맞게 구슬을 갖고 있거나, 모자라거나 둘 중 하나의 상태가 된다. 2. 두번째로..
[백준] 4436 - 엘프의 검
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/4436 가볍게 브론즈 문제를 하나 풀어봤다. (솔브드 마라톤 시스템 추천 문제)모든 k 값을 1부터 다 시도해보면서 브루트포스로 구현하면 되는 문제다. 근데 푸는데 생각보다 시간이 오래 걸렸다.. 그 이유는 set 연산자를 착각해서 그렇다.나는 s.union() 메서드가 기존 집합에 자동적으로 더해주는 줄 알았는데, 기존 집합이 변하지 않고, 새로운 합집합을 반환한다는 점을 프린트로 찍으면서 디버깅하느라 10분정도 걸려서 푼 것 같다.. 이 문제 덕분에 파이썬 집합 연산은 새로운 집합을 반환하므로 기존 집합을 덮어써야 한다는 것을 깨달을 수 있었다. import sysinput = sys.stdin.readlinewhile True: try..
[백준] 11437 - LCA (Python)
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/11437 워냑 유명한 유형이다보니 (나도 풀어보지는 않았지만 이 유형에 대해서 들어봤었다.) 정형화된 알고리즘이 있을 것 같은데, 우선 스스로의 고민으로 먼저 풀어보기로 했다. 어떤 트리가 주어질 때, 임의의 두 노드에 대해 그 두 노드의 최소 공통 조상 노드를 찾는 것이 문제의 요구사항이다.이때 트리의 루트는 1번 노드이다.(나는 이 조건을 못 보고 어떤 루트로 잡든 성립하는 문제인가보다~ 하고 1번 노드를 루트로 잡고 풀었는데, 생각해보면 두 노드 중에 한 노드를 매번 루트로 잡으면 그 노드가 최소 공통 조상이 되어버리니 루트는 정해져있어야 의미있는 문제였다.) 처음에는 특정 노드에서부터 루트를 향해 올라가면서 공통 조상 노드를 찾는 방법을 ..
[백준] 14442 - 벽 부수고 이동하기 2 (Java)
·
알고리즘 (PS)/BOJ
https://www.acmicpc.net/problem/14442 자바로 한번 구현해봤더니 파이썬의 편리함을 다시 한번 깨닫게 해준 문제... 문제 풀이는 간단하다.(i, j) 위치에 k번의 벽 부수기 횟수가 남은 상태로 도착했을 때, 그때의 최단 이동 경로를 다 저장하면된다.최악의 경우 1000*1000*10 = 1000만 칸의 배열을 채워야 하는데, 2초 시간 제한과 512MB 의 메모리 제한이라면 충분히 채울 수 있다. 만약 이동하려는 칸이 벽이라면 현재 칸에서 남은 벽 부수기 횟수를 1 감소시켜서 이동시키고, 이동하려는 칸이 벽이 아니라면 남은 횟수를 그대로 가져가면서 이동하면 된다. import java.io.BufferedReader;import java.io.IOException;impor..