본문 바로가기

--------------------****19

자바 데이터베이스(DB) 연습 자바2에서 데이터베이스를 약간 다루게 되는데, 다음의 문제로 명령어들을 연습해보실 수 있습니다. https://programmers.co.kr/learn/challenges 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 각 주제는 다음과 같습니다. SELECT SUM,MAX,MIN GROUP BY IS NULL JOIN String, Date 이 주제들을 클릭하면 세부 문제가 있는데, 예를들어 SELECT를 연습하고 싶다면 SELECT를 클릭하고 보이는 7개의 문제중 1개를 선택합니다. 그 중 한 문제를 풀어보도록 하겠습니다. LEVEL 1 의 "모든 레.. 2020. 3. 13.
Convenience store program 메뉴 버튼을 구획을 나눴고 어떤 버튼을 클릭했는지 보여주기 위해서 클릭된 버튼에 색을 입혀주었음 콤보박스를 사용해서 이미 입력된 대분류가 있다면 바로 입력 가능하도록 만들었다. (그런데 추가 후 콤보박스가 초기화되지 않는걸 나중에 알았음) 가격과 재고 개수를 입력하는 부분은 범위를 벗어나거나 숫자가 아닌것을 입력하면 try-catch로 오류 문구를 잡아줌 판매자 메뉴는 한번에 판매해버리지 않고 다시한번 확인하는 절차를 거친다. 물품 삭제의 경우, 대분류로 분류된 마지막 제품이 사라진다면 try-catch의 문구를 다르게 적용. 제품 목록의 경우에는 이전 버전의 경우에, 저장된 시간까지 나타내어주었으나, DB를 사용하면서 자동으로 물품정보가 변경되기 때문에 저장 버튼을 제거함. 그리고 프로그램을 종료 후,.. 2020. 3. 8.
chatting program 기존의 명령어 라인 입력하는 방식을 개선한 gui 채팅 프로그램 stream 부분을 어떻게 고쳐야 할지 고민하는게 가장 우선적인 문제. 그 다음으로 생각해볼만한 내용들은 개인적인 수정내용이었는데, 어떻게 채팅방 아이디를 보내줄지 만약 연결이 안됐다면 try-catch로 어떤 메시지를 보내줄지, 여기서, 여러번 연결이 안된다면 같은 메시지를 띄우겔 될 경우 작동을 제대로 하는지 아닌지 모를 수 있다. 이럴 경우에는 어떤 메시지를 띄울지 생각해보기. 나중에 눈에 띄었던건, 아이디를 넘길 때 연결하기 버튼을 누른 그 때 같이 보내줄걸 하는 생각이 들었고 물론 첫번째 채팅을 한다면 같이 아이디가 넘어가긴 하지만 아쉬웠던 부분. 보내기 버튼을 누르지 않고 엔터를 누른다면? 엔터를 누르고 채팅창 입력부분을 지워야 .. 2020. 3. 8.
Iterator Iterator 사용하고 for문을 사용하지 않습니다. 2020. 2. 16.
Boyer-Moore의 탐색 알고리즘/보이어무어 int BM_Search(char *p, char *a) { int i, j, t, M, N; M = strlen(p), N = strlen(a); InitSkip(p); /* skip[] 초기화 */ for(i = j = M - 1; j >= 0; i--, j--) while (a[i] != p[j]) { t = skip[index(a[i])]; i = i + max(M-j, t); /* 둘중 큰것 선택 */ if(i >= N) return(N); /* 매칭안됨 */ j = M - 1; /* p의 마지막 문자 위치 */ } return(i+1); /* 일치된 문자열의 시작 위치 */ } InitSkip(p) { for(각 알파벳 문자 k에 대해) skip[k] = M; // 초기화 //보통은 (int .. 2019. 12. 28.
선형 탐색법 - 해시 테이블 자료 삽입 순서 : GA, D, A, G, L, A2, A1, A3, A4, Z, ZA, E 자료를 삽입하기에 앞서, 반드시 다음과 같은 배열 구조를 그려야 한다. 숫자는 메모리 주소를 나타내고, 알파벳은 그 주소에 들어가야 할 데이터의 첫 글자를 나타낸다. 예를들어 데이터가 A7이라면 A7의 첫 글자는 A이기 때문에 1번 주소에 들어가야 하고, 데이터가 QA라면 QA의 첫 글자는 Q이기 때문에 17번 주소에 들어가야 한다. 자료 삽입 순서 : GA, D, A, G, L, A2, A1, A3, A4, Z, ZA, E 제시된 글자의 첫 글자와 일치하는 주소에 해당 데이터를 삽입한다. 자료 삽입 순서를 보면 GA가 가장 먼저 제시되었기 때문에 GA부터 시작한다. GA는 G로 시작하기 때문에 G로 시작하는 7.. 2019. 12. 27.
다단계 합병에서 런의 분포 다단계 합병의 개념을 알았다면, 런의 분포를 나타낸 위의 표를 이해할 수 있어야 한다. 더 나아가 다음의 합병은 어떻게 되는지를 스스로 적어볼 수 있어야 한다. 들어가기에 앞서서 개념을 잘 정리했는지 알아보기 위해 몇가지를 점검해야 한다. 1. 어떤 파일에 합병할 것인지 2. 합병된 파일에는 몇개의 런이 합병된 것인지 3. 합병 결과, 파일들의 런의 개수는 어떻게 되는 것인지 4. 최종 위치는 어느 파일에 합병되는 것인지 기본적으로 다단계 합병에서는 0보다 큰 런의 개수 중, 가장 작은 런의 개수가 있는 것을 눈여겨봐야 한다. 런의 개수가 0보다 큰 파일 중, 가장 작은 런의 개수를 가진 파일의 런의 개수를 0으로 만들어줘야 하는것이 목표다. 파일 3의 내부 정렬 단계가 2인 것이 가장 작은 런의 개수이.. 2019. 12. 27.
깊이 우선 순회 DFS - 스택 이용 #define MAX 50 class Node { int vertex; //정점(노드) Node *link; //정점(노드)와 연결된 다른 노드 } *graph[MAX], *w; int visited[MAX]; main() { int i, s; for(i = 0; i < MAX; i++) visited[i] = FALSE; s = 0; // s = 시작 노드; DFS(s); } 간단하게 스택구조를 설명하기로 한다. 스택은 입구가 1개. 들어가는 부분으로 나온다고 생각하면 된다. 즉, 그림에서처럼 윗부분은 뚫렸기 때문에 데이터가 들어가거나 나올 수 있지만, 하단은 막혀있기 때문에 하단으로는 데이터가 드나들 수 없다. 어떻게 본다면 스택은 마치 접시를 쌓아놓는 구조와 같다. 다음과 같이 접시를 하나하나 차곡.. 2019. 12. 26.
AVL 트리 설명 AVL트리에 대략적으로 기억하고 문제를 본다면 다소 헷갈릴수 있는 부분이 있다. 첫째, 어떻게 계산을 하는걸까? 둘째, 데이터의 삽입 또는 삭제로 균형이 깨지는 경우, 회전연산을 이용하는데 어떤것을 기준으로 하는걸까? 셋째, 만약 균형이 깨진 곳이 두군데라면 어느곳을 바꿔야 하는걸까? 넷째, 회전 연산의 종류는 LL,LR,RR,RL 회전이 있는데 회전의 기준은 어떻게 되는 것일까? 다섯째, 회전 연산의 이름은 어떻게 붙여진 것일까? 여섯째, 삽입하는 경우 어느 위치로 배정되는 것일까? 위의 문제를 차근차근 해결할수 있다면 AVL트리를 온전히 이해한 것이라 볼 수 있을것이라 생각한다. (공부하면서 궁금했던 부분들이었다.) 맨 처음에는 'Mar'이라는 데이터가 들어왔다. 'Mar' 위에 0이라는 숫자가 보이.. 2019. 12. 24.