※ JDBC API의 단점 - 쿼리 실행 이전과 이후에 많은 코드를 작성해야 한다. (Connection, statement, 연결 및 해제) - 데이터베이스 로직에 있는 코드를 관리하기 위한 예외를 작성해야 한다. - 여러 개의 데이터베이스로부터 코드 반복이라는 시간 낭비를 하게 된다. - DB에 따라 일관성 없는 정보를 가진 채로 Checked Exception으로 처리한다. - Connection과 같은 공유 리소스를 제대로 릴리즈 해주지 않으면 시스템의 자원이 바닥나는 버그를 발생시킨다 SQL Mapper SQL Mapper는 개발자가 직접 SQL문을 작성해 데이터베이스 데이터를 다루는 Persistence Framework이다. 객체와 테이블 간의 관계를 직접 매핑하는 것이 아닌, SQL문을 실..
13강 (시뮬레이션) 1. 상하좌우는 dy[4], dx[4]를 적극사용 2. 매번 반복문을 돌면서 시작위치를 탐색하기보다는 vector pos에 미리 시작위치를 입력받을 때 저장해두는 것이좋다 3. bfs에서와 마찬가지로 특정 index를 활용하여 bool visited 배열의 사용 없이 방문여부를 체크할 수 있다. 4. 이전 값을 저장해둠으로써 false로 되돌리는 효과를 얻을 수 있다. 각 CCTV의 방향을 정해야함 >> 16가지의 가능성 (백트래킹) 변수들이 가질 수 있는 값이 여러개이고 모든 조합을 확인하고 싶은 상황에서 변수들끼리는 서로 독립적일 때 백트래킹대신 진법 이용하면 더 쉬움 가능한 종류가 4개 → 4진법사용 000~333 각각의 자리를 방향 3개에 대응시킴 39는 4진법으로 213 →..
9강 (BFS) - 너비 우선 탐색 - pair이용 (좌표) - BFS를 돌 때 큐에 쌓이는 순서는 반드시 거리 순 - 예외처리는 continue로 넘겨버리는 것이 깔끔 → 좀 더 직관적 - visited 배열을 별도로 관리하기보다 distance배열에 -1을 저장해둠으로써 관리가 용이해지고 공간을 절약할 수 있음 (거리와 방문 여부 동시 관리 가능) - [응용1] 최단경로(거리측정) - [응용2] 시작점이 여러개일 때 - [응용3] 시작점이 두 종류일 때 → A의 전파가 B에 영향을 주고 B의 전파가 A에 영향을 주지 않는 경우(독립적인 상황)가 아니고 상호 영향을 주는 관계라면 어느 하나를 먼저 전파시키는 것이 불가능 이러한 경우에는, 시간 순으로 A와 B를 동시에 진행시켜야 함 - [응용4] 1차원..
4강 - STL의 list는 이중연결리스트 구조 - 야매 연결 리스트 (배열로 구현하는 간결 연결리스트) const int MX = 1000005; int dat[MX], pre[MX], nxt[MX]; int unused = 1; fill(pre, pre+MX, -1); fill(nxt, nxt+MX, -1); 1406번 에디터 → STL list, 야매 연결 리스트를 사용하여 풀어보기 5강 (스택) push, pop, top, emtpy, size 스택이 비어있을 때에는 top이나 pop을 호출하지 않도록 주의 6강 (큐) 원형큐 → push와 pop을 반복하다보면 점점 뒤로 밀리는 점 개선 7강 (덱) stl deque에선 인덱스로 원소에 접근할 수 있음 stl deque는 front에서도 O(1)..
0강 - X 1강 실수를 비교할 때에는 등호를 사용하면 안된다. abs(a-b) < 1e-12을 사용해서 비교 2강 - 참조자 사용 - STL vector는 인자로 전달하여 해당 함수에서 값을 변경하여도 원본 vector에 반영되지 않음. vector를 함수인자로 넘길 때 복사비용때문에 1차원 벡터기준 O(N)의 시간복잡도 필요 → vector& v1과 같이 참조자 사용으로 O(1)으로 사용가능. - getline(cin, s)를 통해 공백이 있는 문자열을 입력받음 - ios::sync_with_stdio(0), cin.tie(0) → 동기화를 끊음을 통해 시간 절약 가능. 단, 이를 사용했으면 cout과 printf를 섞어써서는 안된다. 3강 - 배열 초기화시 memset 비추천 - algorithm ..
1. Vector란? - Vector는 동적 배열 구조를 C++로 구현한 것으로 맨 끝에서만 삽입 및 삭제가 일어나는 구조이다. 일반 배열과 차이점으로는 동적으로 크기가 변하고 메모리가 연속적이므로 자동으로 배열의 크기를 조절할 수 있고 유연하게 객체의 추가 및 삭제가 가능하다. 중간 데이터의 삭제도 erase함수를 통해 지원하지만, 삭제가 빈번히 일어나는 경우 연결리스트를 사용하는 것이 효율적. 쉽게 가변길이 배열이라고 생각할 수 있다. 2. Vector의 헤더파일 Vector STL을 사용하기 위해서는 #include 헤더파일을 포함해주어야 한다. 3. Vector의 선언 방법 1) 크기를 정하지 않은 경우 vector 이름; vector v; 2) 크기를 정하는 경우 vector 이름(크기); 기본..
DFS (Depth First Search) - 깊이 우선 탐색 - 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 - DFS는 스택 자료구조 (혹은 재귀함수)를 이용 원리 1. 탐색시작노드를 스택에 삽입하고 방문처리 2. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문처리 3. 더이상 2번의 과정을 수행할 수 없을 때까지 반복 C++ 구현코드 #include #include using namespace std; int number = 7; //노드 개수 int c[8]; //방문 처리를 위한 배열 vector a[8]; //총 7개의 노드가 각각 인접한 노드를 가질 수 있도록 만들어줌 void dfs(int x) { if (c[x]) //이미 방문했다면..
