#include #include using namespace std;const int ROOT = 1;int unused = 2;const int MX = 10000 * 500 + 5; // 최대 등장 가능한 글자의 수bool chk[MX];int nxt[MX][26];int c2i(char c) { return c - 'a';}void insert(string& s) { int cur = ROOT; for (auto c : s) { if (nxt[cur][c2i(c)] == -1) nxt[cur][c2i(c)] = unused++; cur = nxt[cur][c2i(c)]; } chk[cur] = true;}bool find(str..
알고리즘

1. 다항식 롤링 해시란?다항식 롤링 해시는 문자열의 각 문자를 일정한 베이스(예: 131, 257 등) 를 이용해 하나의 정수로 변환하는 방식입니다.예를 들어, 문자열 s에 대해 해시값을 아래와 같이 계산할 수 있습니다.하지만 실제 구현에서는 오버플로우와 연산 효율을 고려하여 보통 누적 방식으로 계산합니다.코드로 살펴보기const int TABLE_SIZE = 100003; // 큰 소수를 사용하는 것이 좋습니다.int getHash(const string &s) { unsigned long long hash_val = 0; for (char c : s) { hash_val = hash_val * 131 + c; // 131은 베이스로 자주 사용되는 소수입니다. } ..
#include using namespace std;/** * @brief ans 변수를 사용하는 lower_bound * @param arr 오름차순 정렬된 배열 * @param val 찾고자 하는 값 * @return arr 내에서 (arr[idx] >= val)을 만족하는 가장 작은 idx * (없으면 arr.size() 리턴) */int my_lower_bound_ans(const vector& arr, int val) { int l = 0; int r = (int)arr.size() - 1; int ans = (int)arr.size(); // 없을 경우 기본값 while (l = val) { ans = mid; // 조건 만족..
1. 크루스칼(Kruskal) 그래프 표현: 보통 간선 리스트 형태로 가지고 있습니다.핵심:모든 간선을 비용 기준으로 오름차순 정렬유니온 파인드(Union-Find)로 사이클 확인비용이 작은 간선부터 차례대로 MST에 추가#include using namespace std;struct Edge { int u, v; // 간선을 잇는 두 정점 long long cost; // 간선의 가중치};// 전역 혹은 클래스 내 Union-Findstatic const int MAXN = 100000; // 정점 최대 개수 예시 (원하는 만큼)int parentSet[MAXN];int rankSet[MAXN];// Union-Find find 함수(경로 압축)int Find(int x) { ..
#include #include #include #include #include using namespace std;const int MAX_SIZE = 101;int parent[MAX_SIZE];int rankArr[MAX_SIZE];void initialize() { for (int x = 0; x rankArr[B]) { parent[B] = A; } else { parent[B] = A; rankArr[A]++; }}int main(int argc, char** argv) { ios::sync_with_stdio(false); cin.tie(nullptr); return 0;}유니온 파인드란?유니온 파인드(..
C++ 템플릿과 STL: 핵심 개념 정리📌 템플릿(Template)이란?템플릿은 C++에서 일반화 프로그래밍을 구현하는 핵심 도구입니다.함수나 클래스를 데이터 타입에 독립적으로 설계할 수 있게 해주며,동일한 로직을 다양한 타입에 재사용할 수 있게 합니다.🛠 템플릿의 핵심 특징타입 추상화: typename T로 타입을 매개변수화하여 코드 재사용성 ↑컴파일 시 인스턴스화: 실제 사용 시점에 구체적인 타입으로 생성됨📝 템플릿 예시1. 함수 템플릿#include using namespace std;template T myMax(T a, T b) { return (a > b) ? a : b;}int main() { cout 동작 원리: 호출 시 전달된 인자의 타입에 따라 T가 int, double..
SQL 문법 정리 10: 트리거(Trigger) 📌 트리거(Trigger)란?특정 이벤트(INSERT, UPDATE, DELETE) 발생 시 자동으로 실행되는 데이터베이스 프로시저데이터 무결성 유지, 로그 기록, 자동 계산 등에 활용행 단위 제어가 필요한 작업에 적합🔍 트리거 구조DELIMITER $$CREATE TRIGGER 트리거이름 [BEFORE | AFTER] [INSERT | UPDATE | DELETE] ON 테이블이름FOR EACH ROW -- 행 트리거 (Row-Level Trigger)BEGIN -- 실행할 로직 (SQL 문장)END $$DELIMITER ;💡 BEFORE vs AFTER구분설명BEFORE이벤트 실행 전에 트리거 작동 (예: 유효성 검사)AFTER이벤트 실행..
SQL 문법 정리 9 : 커서(Cursor)와 사용자 정의 함수(Function) 📌 커서(Cursor)란?메모리 상의 결과 위치를 가리키는 데이터베이스 객체SELECT 문의 결과로 반환된 여러 행을 순차적으로 처리할 때 사용행 단위 작업에 유용 (예: 결과 집합을 한 행씩 읽어 로직 처리)🔍 커서 사용 구조DECLARE 커서이름 CURSOR FOR SELECT 문;DECLARE CONTINUE HANDLER FOR NOT FOUND SET 변수=값;OPEN 커서이름;라벨: LOOP FETCH 커서이름 INTO 변수; IF 종료조건 THEN LEAVE 라벨; -- 로직 처리 --END LOOP;CLOSE 커서이름;💡 커서 사용 예제1. 입사년도 기준 사원 정보 조회DROP PROC..
SQL 문법 정리 8 : 프로시저, CASE ,WHILE문 활용📌 스토어드 프로시저 기본 구조DELIMITER $$CREATE PROCEDURE 프로시저명(IN/OUT 매개변수)BEGIN DECLARE 변수 선언; SQL 프로그래밍 코드;END $$DELIMITER ;CALL 프로시저명(); -- 실행DELIMITER: 문장 종료 기호 임시 변경IN/OUT: 입력/출력 매개변수 지정DECLARE: 지역 변수 선언🛠️ 실전 예제1. 기본 조회 프로시저DROP PROCEDURE IF EXISTS emp_proc;DELIMITER $$CREATE PROCEDURE emp_proc()BEGIN SELECT * FROM EMP;END $$DELIMITER ;CALL emp_proc();기능:..
SQL문법 정리 7: 테이블 구조 변경 및 제약 조건 관리1. 테이블 생성 및 데이터 입력UDEPT2 테이블CREATE TABLE UDEPT2 ( DNO INT PRIMARY KEY, DNAME VARCHAR(20) UNIQUE, DTEL VARCHAR(20) NOT NULL);STUDENT2 테이블CREATE TABLE STUDENT2 ( SNO INT, SNAME VARCHAR(20), SDEPT INT);데이터 입력-- UDEPT2 데이터INSERT INTO UDEPT2 VALUES (10, 'COMPUTER', '02-2164-4111'),(20, 'ENGLISH', '02-2164-4112'),(30, 'BIOLOGY', '02-2164-4113'),(40, 'MUSIC..