커넥션 풀의 이해 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 커넥션 풀 이런 문제를 한번에 해결하는 아이디어가 바로 커넥션을 미리 생성해두고 사용하는 커넥션 풀이라는 방법이 다...
Calendar와 Date Date의 기능이 빈약하면서 Calendar가 제공되었다. Calendar는 Date보다는 제공하는 기능이 훨씬 나았지만 단점이 존재한다. Calendar와 Date의 기능은 깊게 배울 필요 없이 예제들을 이해하고 필요할 때 활요하는 정도면 충분하다. 사용법 Calendar는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다. //불가능 ! 추상클래스 인스턴스 생성 X Calendar cal = new Claneder(); //getInstance() 메서드를 통해 Calendar 클래스를 구현한 클래스의 인스턴스를 반환한다. Calendar cal1 = Calendar.getInstance(); 하지만 Calen..
동적프로그래밍 문제이다 .... ! https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제풀이 문제 자체는 굉장히 심플하다. 연속되는 수를 선택해서 구할 수 있는 합 중에 가장 큰 합을 구하는 문제이다. 예제입력 2를 보게 되면 3 4 -4 6 5 가 선택되어 출력이 14가 나왔다. 즉, 음수, 양수를 신경쓰지 않고 선택하는 것이다. 점화식도 간단하게 구할 수 있다. 이전까지 탐색했던 값과 현재 위치의 값을 비교하여 더 큰 값을 저장하면된다. memo[0]..
관계대수란? 릴레이션들을 다루는 연산들 검색 요구(질의)를 기술하는 데 사용 릴레이션에 대한 연산의 결과도 릴레이션이다 관계 대수 연산의 종류 수학적 집합 연산 합집합 차집합 교집합 카티션 프로덕트 관계 데이터 베이스를 위한 특별 연산 실렉트 조인 프로젝트 실렉트(Select) 연산 (선택조건, 튜플) 𝞼 시그마로 표기 릴레이션 R에서 주어진 선택조건을 만족하는 튜플(속성의 모임)들을 선택함 결과 릴레이션은 R과 동일한 애트리뷰트들을 가짐(릴레이션 차수 동일) 결과 릴레이션은 r(R)의 투플 중 애트리 뷰트 값들이 선택조건을 만족하는 튜플들로 구성됨 실렉트 연산 형식 𝞼 (R) 선택 조건은 R의 애트리 뷰트들에 대한 부울식(Boolean equation)이다 ex) Age >= 18 ex) Emp.ID ..
문제해결프로그래밍 수업에서 동적프로그래밍을 하고 있던 차라 정리하면서 간단한 문제를 하나 풀어보았다. https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 들어가기 앞서 동적프로그래밍(Dynamic Programming)이란 얼핏보면 어려워보이지만 사실 동적계획법에서 동적이란 "기억"을 의미한다. 메모이제이션을 이용하여 이미 계산된 결과를 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 하는 방식이다. 정말 말그대로 기억을 해두는 것이다. DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식) 두가지 방식으로 구성된다. 하향식은 재귀..
알고리즘 분류는 구현, 자료구조, 큐이다. 문제 1부터 N까지의 카드에 대해서 한장은 버리고, 그 다음장은 맨 아래로 옮기는 것이 카드가 1장이 남을때까지 반복 된다. 1부터 4까지 있을 때 1 2 3 4 -> 1은 버리고 2는 아래로 옮기면서 3 4 2 -> 3은 버리고 4는 아래로 옮기면서 2 4 -> 2를 버리면 카드가 4 한장이 남기 때문에 버린 순서대로 -> 1 3 2 4 가 정답이 되게 된다. 버린 카드: 1 3 2 마지막 카드: 4 풀이 큐를 이용하여 간단하게 문제를 풀어보았다. 1~N까지의 수를 큐에 넣고, 큐에 첫장은 빼서 바로 출력하고, 그 다음장은 빼자마자 큐에 다시 넣는 작업을 큐의 사이즈가 1보다 클때까지만 while문을 이용하여 반복하였다. 그 후엔 마지막 장을 출력해주면 된다...
전공공부에 매진하다보니 백준을 푼지 오래된 것 같아서 차근차근 다시 풀어보려고 한다. https://www.acmicpc.net/problem/6550 6550번: 부분 문자열 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다. www.acmicpc.net 위 문제는 입력이 없을 때 까지 반복처리를 해야하기 때문에 while문을 이용하여 eof 처리를 진행하였다. 백준의 경우에는 입력 자체가 파일로 처리되기 때문에 아래 코드로 정상처리가 되지만 Intellij는 IDE에서의 입력이기 때문에 끝을 찾지 못해서 따로 control+D 를 이용한 종료를 해야한다. while..
백준 7578번 토마토 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 백준 7569번 토마토 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net ..