본문 바로가기

분류 전체보기

(166)
ERD와 정규형(정규화) https://chat.openai.com/share/4919fbd6-fcf8-4e2f-a1e1-8f53b2d78ce2 ChatGPT A conversational AI system that listens, learns, and challenges chat.openai.com 1정규형, 2정규형, 3정규형, 보이스/코드 정규형, 4정규형, 5정규형이 있다. 그 중에서 1~3, 보이스/코드 정규형을 읽어보았다. 개념만 확인하였을 때는 이해가 쉽지 않았다. 물론, 그냥 단순하게 1정규형은 원자성을 지키고,, 이런식으로 암기는 쉬웠지만 그래서 강의나 예제를 통해서 이해해보았다. 실무에서 해당 정규화가 필요한 경우나 반정규화의 필요성을 느끼기 어려웠다. 물론,, 그러한 부분을 다들 고려해서 설계해서 작업을 진행..
관계와 키 https://chat.openai.com/share/d9da103e-ffda-4845-8ae6-7887ad9c444c ChatGPT A conversational AI system that listens, learns, and challenges chat.openai.com n:m 테이블이 중간에 그들을 연결해주는 중간 테이블을 가지고 있다는 것을 알았다. 슈퍼키는 유일성을 만족하고 후보키는 최소성까지 만족한다. 즉 회원의 경우 이메일만으로도 기본키를 구성할 수 있지만 이름과 이메일을 기본키로 한다면 최소성에 만족하지 않는다. 자연스럽게 뽑다가 나오는 것이 자연키 오라클의 시퀀스 같이 값이 변하지 않고 의도적으로 아이디를 부여하는 것이 인조키이다.
필드와 튜플, 릴레이션, 속성, 도메인 https://chat.openai.com/share/10d3654f-fcbb-4217-a109-7f313b8c94a1 정리하면서도 꽤나 헷갈렸다 뭐가 뭘 나타내고 어떤 것이 비슷한 의미이고 같은걸 나타내는지 ,,, 결국 릴레이션은 테이블이며 레코드와 튜플로 구성되고 필드는 속성이고 도메인의 필드가 가지는 값의 집합이다. 또한 blob, enum, set 타입을 알게 되었고 timestamp가 왜 38년까지만 표현되는지에도 관심을 가지게 되었다. enum의 경우 가끔 알고리즘을 풀 때 방향을 보기 좋게하려고 사용했었어서 상대적으로 익숙했다. blob의 경우 요즘은 blob을 사용하기 보다 s3 서비스를 통해 varchar 데이터 타입에 링크만 넘기는 식으로 하는 것이 보통이라고 한다. 또한 유동적인 길이..
dy dx 테크닉 dy dx를 그 동안 내 생각대로 혹은 문제에서 주어진 순서대로 놓을 생각만 했지.. 만약 위치가 맵의 끝에 닿았을 때 반대로 가는 경우, 혹은 오른쪽으로 회전하는 경우에도 dy, dx 배열을 신경 써줘야하는 것을 알았다. dy dx 를 사용하더라도 좌표에서 푸는 문제인지, 배열을 사용해야 하는지 먼저 확인해야 한다. 좌표로 충분히 풀 수 있다면, 훨씬 풀이가 간단해지고 깔끔해진다. 그런데 물론 그 문제들도 배열을 사용해서 풀 수 있겠지만,, 조금 복잡해지는 감이 있다.
좌표와 배열 착각하지 않기 좌표는 위로 올라갈수록 y가 커지지만,, 배열에서는 그 값이 작아진다. 정확히는 깊어질수록 커진다. 그런데 좌표 문제를 자꾸 배열로 풀면 한참 반대로 푼다. 문제를 풀 때 값은 같고 부호만 반대이길래 한참 찾았다,,
연속 부분 수열 동일한 숫자가 나왔을 때의 연속 부분 수열 i가 0일때를 먼저 조건에 걸지 않으면, map[i] != map[i-1]에서 runtime error가 난다. #include #include using namespace std; int maxCnt = -21e8, map[1000]; int main() { int n, cnt = 0; cin >> n; for(int i=0; i> map[i]; if(i == 0 || map[i] != map[i-1]){ cnt = 1; } else cnt++; maxCnt = max(maxCnt, cnt); } cout
DB, DBMS, 엔터티, 릴레이션
겹치는 지점 구하기 지점을 구하는 법과 구간을 구하는 법은 약간의 차이가 있다. 예를 들어 2,5 에서 5,8의 겹치는 지점은 5부분이다. 그러나 구간을 구한다고 하면 겹치는 구간은 없다. 따라서 지점을 구하는 문제면 (x1, x2) x1부터 x2까지 카운팅 해야하고 구간을 구하는 문제라면 x1부터 x2-1까지 카운팅해야 한다.
진법 전환(진수 to 진수) 10진수에서의 n진수로 전환은 아래와 같이 진행할 수 있다. #include using namespace std; int main() { int N, j, index = 0; int jin[100] = {0,}; cin >> N >> j; while(1){ if(N =0; i++){ cout > a >> b; cin >> n; //10진수 변환 for(int i=0; n.length(); i++){ num10 = num10 * a + (n[i] - '0'); } // 다시 b진수로 변환 int jin[100] = {0, }, index = 0; while(1)..
날짜와 시간 차이 계산하기 만약 1시 40분 부터 6시 45분까지의 지난 분을 계산할 경우 6시 45 - 1시 40이 아닌 0부터 6시 45를 구하고 0부터 1시 40을 구해서 그 값을 빼주는 것이 코드가 훨씬 간결해진다. 날짜도 마찬가지로 1월 1일에서 시작하여 각 날짜까지 총 몇 일이 있는지를 계산하여 그 차이를 계산하는 식으로 진행하는 것이 훨씬 간결하게 코드를 작성할 수 있다.