TIL: 알고리즘 패턴 복습 & DB 기초 다지기
오늘은 그동안 진행했던 알고리즘 핵심 패턴들을 다시 한번 정리하고, 새롭게 들어간 데이터베이스(DB)의 기초 개념들을 학습했다. 특히 SQL 구문은 실습이 중요하니까 손에 익을 때까지 계속 써봐야 할 것 같다.(아직은 무슨말인지 잘 모르겠다)
1. 알고리즘: 패턴화 & 핵심 요약
알고리즘은 무작정 푸는 게 아니라 상황에 맞는 도구를 꺼내는 연습인 것 같다. (상황별로 외우면 도움될만한 부분들이 좀 있는듯하다)
자주 쓰는 알고리즘 & 자료구조 패턴
- 자료구조: Stack(괄호, 후위 표기식), Queue(BFS), PriorityQueue(다익스트라, 최솟값/최댓값 관리) 활용.
- 탐색: BFS(최단 거리), DFS(완전 탐색), 백트래킹(조건부 완탐).
- 최적화: 중복 계산이 보이면 무조건 DP(Dynamic Programming) 고려하기 (LIS, 배낭 문제 등).
- 시뮬레이션: 방향 배열 dr/dc와 반시계 회전 공식 (d+3)%4는 이제 거의 암기 수준으로 익혀야 함.
주요 문제 해결 포인트 (0507)
- 가르침(1062번): 조합이랑 비트마스킹을 섞어서 푸는 게 핵심. a, n, t, i, c 5글자는 필수니까 미리 체크!
- 로봇 청소기(14503번): 조건에 맞춰 구현하는 시뮬레이션. 후진할 때 r -= dr[d] 패턴 기억하기.
- 아기 상어(16236번): BFS로 가장 가까운 먹이를 찾고 시뮬레이션을 반복하는 구조.
2. Database & MySQL 기초 (New!)
이제 본격적으로 데이터를 관리하는 법을 배운다.
DB와 RDBMS
- 데이터베이스: 소프트웨어에 종속되지 않는 독립된 정보 저장소.
- RDBMS(관계형 DB): 데이터를 표(Table) 형태로 관리. 중복 방지가 핵심! (ex. MySQL)
- SQL: DB랑 대화하기 위한 표준 언어. 문장 구조가 영어랑 비슷해서 생각보다 직관적임.
SQL 핵심 구문 정리
- 조회(SELECT): WHERE(조건), ORDER BY(정렬), LIMIT(개수), AS(별칭) 조합해서 사용.
- 조작(DML):
- INSERT: 데이터 추가.
- UPDATE: 데이터 수정 (WHERE 절 빼먹으면 대참사 나니까 주의!!).
- DELETE vs TRUNCATE: 행 삭제냐 테이블 초기화냐의 차이.
- 함수 & 그룹화:
- 문자열(CONCAT, SUBSTRING), 날짜(DATE_FORMAT, DATEDIFF) 등 내장 함수 활용도 높음.
- GROUP BY로 묶고 통계 낼 때, 조건은 WHERE가 아니라 HAVING이라는 점 잊지 말기.
고급 기법
- JOIN (중요 ): 흩어져 있는 테이블을 하나로 합치는 기능. INNER JOIN이랑 LEFT JOIN 차이 명확히 알기.
- Subquery: 쿼리 안에 쿼리. 복잡한 필터링할 때 유용함.
3. 데이터 유형 및 제약 조건
- 자료형: INT(정수), VARCHAR(가변 문자), DATETIME(날짜) 등 데이터 성격에 맞게 설정.
- 제약 조건:
- PRIMARY KEY: 데이터 식별자 (중복 X).
- AUTO_INCREMENT: 번호 자동 생성.
- FOREIGN KEY: 테이블 간의 관계 연결고리.
오늘의 회고
- 알고리즘은 BufferedReader + StringTokenizer 템플릿을 아예 외워버리니까 속도가 훨씬 빨라졌다.(하지만 아직 너무 어려움)
- DB는 워크벤치(Workbench) 설치해서 직접 테이블 만들고 데이터 넣어보니까 재미는 있는데 혼자는 못할것 같음.
- 단순히 쿼리를 짜는 걸 넘어, 정규화를 통해 어떻게 하면 데이터를 효율적으로 쪼개고 합칠지 고민해봐야겠다.