[자료구조/알고리즘] 누적 합 (Prefix Sum)
1. 누적 합 누적 합(Prefix Sum)은 배열의 앞에서부터의 합을 미리 계산해 두는 일종의 전처리(Preprocessing) 기법이다. 주어진 배열에서 반복적으로 임의의 구간의 합을 구해야 하는 문제를 상상해보자. 배열의 크기가 $N$, 쿼리의 수가 $M$ 일 때, 각 쿼리마다 매번 주어진 구간의 시작 위치부터 끝 위치까지 더하는 과정을 ...
1. 누적 합 누적 합(Prefix Sum)은 배열의 앞에서부터의 합을 미리 계산해 두는 일종의 전처리(Preprocessing) 기법이다. 주어진 배열에서 반복적으로 임의의 구간의 합을 구해야 하는 문제를 상상해보자. 배열의 크기가 $N$, 쿼리의 수가 $M$ 일 때, 각 쿼리마다 매번 주어진 구간의 시작 위치부터 끝 위치까지 더하는 과정을 ...
문제 링크 1. 문제 풀이 $2 \times N$ 크기의 배열에 사자들을 배치해야 하는데 이때 사자들이 가로로도 세로로도 붙어 있게 배치할 수 없다. 이때 배치할 수 있는 모든 경우의 수를 세야하며 사자를 한 마리도 배치하지 않는 경우도 하나의 경우로 센다. 해당 문제는 다이나믹 프로그래밍을 활용하면 해결할 수 있는데 현재 사자를 배치하려...
문제 링크 1. 문제 풀이 윤성이가 판마다 배팅한 양의 정수 형태의 돈이 주어지며 윤성이는 모든 베팅에서 진다. 이때 윤성이가 잃은 돈을 계산해야 하는 문제다. 윤성이가 베팅한 돈의 합계가 윤성이가 잃은 돈이므로 베팅한 돈을 전부 더해주면 된다. 무한 루프를 활용해서 베팅한 돈을 계속 더해줬으며 $-1$ 이 입력으로 들어온 순간 무한 루프...
문제 링크 1. 문제 풀이 이름이 없는 동물은 NULL 값이 채워져 있으므로 이름이 있는 동물은 IS NOT NULL을 활용해서 찾으면 된다. 2. 쿼리 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID;
문제 링크 1. 문제 풀이 보호 시작일을 기준으로 오름차순으로 정렬 후 LIMIT으로 가장 첫 레코드를 조회하면 된다. 또는 집계 함수와 서브쿼리로 보호 시작일이 가장 빠른 날을 찾고 이와 보호 시작일이 동일한 동물의 이름을 찾아도 된다. 2. 쿼리 1. ORDER BY + LIMIT SELECT NAME FROM ANIMAL_...
문제 링크 1. 문제 풀이 이름을 기준으로 사전 순으로 먼저 정렬하고 이름이 같으면 보호 시작일을 기준으로 내림차순으로 정렬해야 한다. ORDER BY 절은 뒤에 온 컬럼 순서로 정렬을 해서 NAME을 먼저 DATETIME을 나중에 써주면 되며 내림차순은 DESC를 넣어주면 된다. 2. 쿼리 SELECT ANIMAL_ID, NAM...
문제 링크 1. 문제 풀이 조회할 컬럼명을 나란히 써주면 된다. 2. 쿼리 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID;
문제 링크 1. 문제 풀이 이름이 없는 동물은 NULL 값이 채워져 있으므로 IS NULL을 활용해서 찾으면 된다. 2. 쿼리 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID;
문제 링크 1. 문제 풀이 젊은 동물은 WHERE INTAKE_CONDITION != 'Aged'로 찾을 수 있다. != 연산자 대신 <>를 써도 된다. 2. 쿼리 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION != 'Aged' ORDER BY ANIMAL...
문제 링크 1. 문제 풀이 LENGTH 컬럼에서 길이가 10cm 이하면 NULL인데 NULL이 포함된 컬럼을 내림차순으로 정렬하면 NULL이 가장 작은 값으로 처리돼서 그냥 정렬하고 위에서 10개만 꺼내면 된다. 2. 쿼리 SELECT ID, LENGTH FROM FISH_INFO ORDER BY LENGTH DESC, ID LI...