목록전체 글 (153)
늘
예~전에 공부한 내용이지만 복습할 겸 글을 적어보려고 한다. 우선 이해하기 쉽게 정의를 해보자면 DAO: 실제 DB에 접근하는 객체 DTO: DB에서 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체 DAO는 최근(?)에는 Repository라고 부른다. 말 그대로 저장소인데 DB에 접근하는 객체(엔티티)로서 이러한 엔티티를 설계할 때는 주로 @setter를 추가하지 않는다. DB와 연관된 만큼 마음대로 수정되면 에러가 발생하기 쉽기 때문이다...! 주로 Builder등 다른 방식으로 이용하는데 이와 관련된 내용도 할 말이 많아서 다음에 포스팅하겠다.! DTO는 DAO로부터 받은 정보들을 controller나 service단에서 자유롭게 움직일 객체이다. 따라서 @getter @se..
상속 논리 모델을 DB 물리 모델로 구현하는데에는 크게 3가지가 있다고 한다. 1. 조인 전략 2. 단일 테이블 3. 구현 클래스 각각 테이블 전략(3번은 잘 안쓴다고 한다..그래서 제외!) 1. 조인 전략 우선 상속 전략을 InheritanceType.JOINED로 설정해준다 그러면 오른쪽 그림처럼 엔티티간에 각각의 DB 테이블이 생성할 수 있다. 가장 정규화된 방법이라고 한다. 2. 단일 테이블 서비스 규모가 크지 않고, 굳이 조인 전략을 선택해서 복잡하게 갈 필요가 없다고 판단 될 때에 이용한다. 한 테이블에 다 저장하고, DTYPE으로 구분하는 단일 테이블 전략을 선택할 수 있다. 개인적으로 작은 프로젝트를 해보면서 단일 테이블 전략에 매력을 느꼈었다. (한눈에 보기 좋아서..) 그런데 규모가 커..
카카오 level2! 처음에 함수로 안만들고 구현했더니 틀렸었다. 아무래도 재귀함수를 이용해야 해서 그랬던것 같다. 그래도 알고리즘 설명이 문제에 나와있어서 손쉽게 풀수 있었다! #include #include using namespace std; //u가 올바른 문자열인지 bool All(string u){ vector vec; vec.push_back('a'); for(int i=0;i
이 문제는 대회 당시에 시간초과로 시간을 많이 잡아먹었는데 대회가 끝나고 자료구조를 set으로 바꿔서 해보니 한번에 통과되어서 상당히 현타가 왔던 문제였다.... #include #include #include #include using namespace std; string s, e, q; set st; long long Change(string s) { string si = s.substr(0, 2); string boon = s.substr(3,2); return 60 * stol(si) + stol(boon); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> s >> e >> q; string str, name; int cnt = ..
신촌 ICPC대회에 나왔던 문제이다. 처음에 LIS문제인가 싶어서 만만히 보고 덤볐다가 여러번 시간을 날리고.. 두 포인터문제라는걸 알게되니 금방 풀렸다..! //20922 #include #include #include using namespace std; int n, k; int arr[200001]; int visited[200001]; vector v; int answer; int l, r; int main() { cin >> n >> k; for (int i = 0; i > arr[i]; } visited[arr[0]] = 1; l = r = 0; while (l
전형적인 dp문제 중 한문제였다. 위에서 내려올때와 옆에서 올때의 두가지 경우로 dp[i][j]가 결정된다. #include #include #include using namespace std; int arr[301][301]; int dp[301][301]; int k; int main() { int n, m; cin >> n >> m; for (int i = 0; i > x >> y; arr[x][y] = m - (x + y); if (arr[x][y] < 0) { arr[x][y] = 0; } dp[x][y] = arr[x][y]; } for (int i = 1; i < 300; ++i) { for (int j = 1; j < 300; ++j) { d..
실버문제여서 만만히 보고 덤볐다고 시간좀 걸렸다. 왠지 자주 사용할것 같아서 한번 정리해두기로 하였다. #include #include using namespace std; int arr[10001]; int dp[10001]; int n; int main() { int k; cin >> n >> k; for (int i = 0; i > arr[i]; } dp[0] = 1; for (int i = 0; i < n; ++i) { for (int j = arr[i]; j
위상정렬 알고리즘을 통하여 해결하였다. 위상 정렬 알고리즘(Topology Sort)은 어떤 일을 하는 순서를 찾는 알고리즘이다. 방향 그래프에서 각 정점의 작업(?)수행 순서에 따라서 정렬은 한다고 볼 수 있다. #include #include #include #include using namespace std; int n, k; int time[1001]; int dp[100001]; int degree[100001]; vector v[100001]; int a, b, c; void clear() { for (int i = 1; i t; for (int x = 0; x > n >> k; for (int i = 1; i > time[i]; } for (int i = 1; ..
#include #include #include using namespace std; int dp[1000001]; vector v; int x; int main() { int n; cin >> n; v.push_back(-1000000001); for (int i = 0; i > x; if (v.back() < x) { v.push_back(x); } else { auto it = lower_bound(v.begin(), v.end(), x); *it = x; } } cout