전체 글 127

[SQL] Join

Join 데이터베이스 내에서 여러 개의 테이블의 레코드들을 키를 기준으로 조합하여 하나의 열로 나타내는 구문입니다. A JOIN B ON A.ID = B.ID : 테이블 A, B에서 ID가 같은 레코드끼리 묶어 데이터를 조합합니다. 집합으로 표현할 때 기본 JOIN인 INNER JOIN 경우 A 위치에 해당하는 결과를 냅니다. Join의 종류 INNER JOIN : A LEFT OUTER JOIN : B + A RIGHT OUTER JOIN : A + C LEFT, RIGHT OUTER JOIN 결과 A에 해당하는 부분은 모든 필드가 채워지지만 B, C에 해당하는 부분은 채워 넣을 데이터가 없으므로 NULL 값으로 채워지게 됩니다. 이외에 두 테이블에서 만들 수 있는 모든 경우의 수, 곱집합을 나타내는 ..

스터디/SQL 2021.03.02

[SQL] NULL 처리

NULL SQL 에서 NULL이란 데이터베이스 내의 데이터값이 존재하지 않는다는 것을 의미합니다. 문자열에서 빈 문자열인 "", 숫자 0과 다른 의미를 가집니다. 테이블에 INSERT 시 NULL을 통해 빈칸으로 둘 수 있으며 JOIN의 경우 LEFT, RIGHT JOIN시 연결되는 값이 없다면 NULL이 됩니다. NULL 처리 IS NULL, IS NOT NULL을 통해 해당 공간이 NULL인지 확인할 수 있습니다. 또한 IFNULL을 통해 NULL인 경우 어떠한 처리를 할 수 있습니다. SELECT NAME FROM TABLE WHERE NAME IS NOT NULL : 이름이 NULL이 아닌 레코드를 출력 SELECT IFNULL(NAME, 'NO NAME') FROM TABLE : 이름을 출력하되..

스터디/SQL 2021.02.28

[SQL] GROUP BY

GROUP BY SELECT 절과 함께 쓰이는 데이터를 원하는 그룹으로 나눌 때 사용합니다. DISTINCT "칼럼명"과 같이 결과를 하나로 묶어주는 역할을 합니다. 나눌 그룹의 칼럼명을 GROUP BY "칼럼명" 형식으로 사용하면 됩니다. HAVING GROUP BY에서 조건을 걸어주기 위한 절이며 WHERE 절과 다르게 집계함수와 함께 사용 가능합니다. 위의 쿼리문은 테이블에서 나이가 20 이상인 사람들의 수를 나이 별로 나타내게 됩니다. 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 고양이와 개는 몇 마리 있을까 SELECT ANIMAL_TYP..

스터디/SQL 2021.02.28

[SQL] 집계 함수

집계 함수 SELECT 절에서 사용 가능한 정보를 모아서 계산하는 함수를 말합니다. "함수명(칼럼명)" 형태로 사용하며 함수 이름이 명확하여 간단하게 사용할 수 있습니다. SELECT COUNT(*) : 테이블의 모든 ROW의 개수를 추출합니다. SELECT COUNT(NAME) : 테이블의 칼럼 중 NAME에 해당하는 ROW의 개수를 추출합니다. 이때 주의해야 할 점은 NULL은 포함되지 않으므로 COUNT(*)의 결과와 다를 수 있습니다. COUNT : ROW의 총개수를 계산합니다. SUM : ROW의 합계를 계산합니다. 이때 칼럼이 덧셈이 불가능한 STRING 등의 타입인 경우 0이 나옵니다. AVG : 평균을 계산합니다. SUM과 마찬가지로 계산이 불가능한 경우 0이 나옵니다. MAX, MIN :..

스터디/SQL 2021.02.26

[SQL] SELECT

SELECT 하나 이상의 테이블에서 특정 데이터를 추출하는 SQL의 기본 언어입니다. FROM 와 같이 사용해야 하며, WHERE, GROUP BY, HAVING, ORDER BY와 함께 사용하며 다음과 같은 의미를 가집니다. SELECT : 테이블에서 항목, 즉 특정 열을 선택합니다. SELECT * : 모든 열을 가져옵니다. DISTINCT를 이용해서 중복을 빼고 추출할 수 있습니다. FROM : 어떤 테이블에서 해당 내용을 가져올지 선택합니다. WHERE : 테이블의 레코드, 즉 열에 조건을 거는 선택 절이며 =, !=,

스터디/SQL 2021.02.26

[백준] 1298 노트북의 주인을 찾아서

1298번: 노트북의 주인을 찾아서 어느 날 모든 학생들은 한 명이 한개의 노트북을 가지고 공부하던 도중, 자리를 바꾸다가 그만 노트북이 뒤섞이고 말았다. 대다수의 학생들은 자신의 노트북을 잘 알고 있어서 자신의 노트북을 www.acmicpc.net 문제 확인 이분 매칭 그래프에서 최소 버텍스 커버 문제입니다. 풀이 백준 돌멩이 제거 문제와 동일합니다. [백준] 1867 돌멩이 제거 문제 주소 : www.acmicpc.net/problem/1867 1867번: 돌멩이 제거 첫째 줄에 n과 k가 주어진다. (1 ≤ n ≤ 500, 1 ≤ k ≤ 10,000) 이후 k개의 줄에는 돌멩이의 위치가 한 줄에 하나씩 주어진다. 줄마다 첫 번째.. latter2005.tistory.com 학생과 노트북을 이분 매칭..

[백준] 14245 XOR

14245번: XOR 첫 번째 줄에 수열의 크기 n (0 < n ≤ 500,000)이 주어진다. 두 번째 줄에 수열의 원소가 0번부터 n - 1번까지 차례대로 주어진다. 수열의 원소는 100,000보다 크지 않은 음이 아닌 정수이다. 세 번째 줄 www.acmicpc.net 문제 확인 구간 업데이트 처리 문제입니다. 세그먼트 트리를 활용해서 풀 수 있지만 점 쿼리 처리에 특화된 펜윅트리를 사용하여 더욱 빠르게 풀 수 있습니다. 펜윅 트리(Fenwick Tree, Binary Indexed Tree, BIT) 펜윅 트리(Fenwick Tree, Binary Indexed Tree, BIT)란? 이전 게시물에서는 세그먼트 트리에 대해 게시물을 올렸다. (세그먼트 트리 :: http://www.crocus.c..

[백준] 1915 가장 큰 정사각형

1915번: 가장 큰 정사각형 첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다. www.acmicpc.net 문제 확인 1000 x 1000 크기 이므로 완전 탐색으로 풀면 시간 초과가 나므로 dp로 풀어야 합니다. 풀이 dp 배열의 의미를 현재 위치에서 만들 수 있는 최대 크기의 정사각형으로 둡니다. 현재 위치(i, j)에서 만들 수 있는 가장 큰 정사각형은 (i-1, j), (i-1, j-1), (i, j-1)의 최솟값 + 1 이 됩니다. 그 이유는 (i-1, j-1)의 값이 뒷부분 정사각형을 채워주고 (i, j-1), (i-1, j) 값이 새로워 가로를 채워주는 역할을 하기 때문입니다. 다음의 경우 dp[i-1, j-1] = 3, d..

[C++] 절댓값 빠르게 구하기

C++ 에는 절댓값을 구할 수 있는 함수 abs 함수가 있습니다. abs - C++ Reference 12345678910111213 /* abs example */ #include /* printf */ #include /* abs */ int main () { int n,m; n=abs(23); m=abs(-11); printf ("n=%d\n",n); printf ("m=%d\n",m); return 0; } www.cplusplus.com 이 함수를 이용하게 되면 함수 호출에 대한 페널티를 받기 때문에 if 혹은 수의 특성을 이용해서 구해 시간을 줄일 수 있습니다. #define bit_abs(x) ~x + 1 정수형인 int, long long의 경우 왼쪽 끝의 비트가 부호를 나타내므로 0x80..

스터디/C++ 2021.02.20

[백준] 1126 같은 탑

1126번: 같은 탑 첫째 줄에 조각의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에 각 조각의 높이가 주어진다. 높이는 500,000보다 작거나 같은 자연수이고, 모든 조각의 높이의 합은 500,000을 넘 www.acmicpc.net 문제 확인 dp 문제입니다. left, right를 나누어 dp를 작성하면 dp[500000][500000]이 되므로 메모리 초과가 일어나기 때문에 | left-right | 를 기준으로 dp를 작성해야 합니다. 풀이 탐색 횟수를 줄이기 위해 입력 받은 수를 정렬하고 현재 단계에서 갈 수 있는 최댓값까지 탐색을 합니다. 조각을 쌓을 때 2가지 경우로 나눌 수 있습니다. 높은 탑에 쌓기 : 높은 탑에 쌓는 경우 현재 dp[j] 를 가리키고 있으며 ..