https://www.acmicpc.net/problem/2094 🐢 설명 일반적인 인덱스 트리 문제라고 생각했지만 추가적인 아이디어가 필요한 문제였다. 경로 압축이라는 방법을 사용해야 한다. Q(Y, X)가 주어졌을 때 "Y년도 이후 X년도가 가장 많은 비가 내렸다"라는 쿼리를 증명하기 위해서는 Y년, X년, 그 사이 년도에 대해 정보를 확인해야 하는데 이때 가능한 모든 년은 -10억 ~ +10억이므로 총 20억의 크기를 갖는 배열을 필요로한다. 이는 메모리 초과가 날것이 뻔하다. 하지만 년도에 대한 정보는 50000개만 주어진다고 하였으므로 해당 년도만 Map 자료구조에 저장해서 사용하도록 하면 위 쿼리에 대해 (Trure / Flase / Maybe)를 증명할 수 있다. Map 맵을 생성하여 년도별..

https://www.acmicpc.net/problem/9998 🐢 설명 이분탐색으로 접근하면 되는데 이분탐색의 중요한 점은 1. 뭘 기준으로 할 것인지, 2. 정렬이 되어 있는지. 이 두가지가 중요한 부분이다. 참고로 1조는 2^40승 정도이고 각 높이에서 N개의 블럭을 비교하면서 이동 블럭의 개수를 세므로 시간복잡도는 N * log(높이)이 되고, N은 30만 정도이므로 대략 30만 * 40 = 1200만 번의 연산 으로 약 1초 내로 풀이가 가능하다. 고로 여기서는 V자형으로 지어야 하는 블럭에 대해 가장 낮은 높이를 갖는 가운데 부분의 높이를 기준으로 탐색을 하게 된다. 0 ~ 최대 가능 높이를 이분탐색하며 h일때 움직여야 하는 블럭의 개수를 확인해서 더 높이 지을지 낮게 지을지를 판단하면 된다..
MVC 패턴 구조 Model, View, Controller로 구성된다. Controller는 HTTP 요청을 받아서 처리하는 역할을 한다. 요청이 오면 서비스 로직을 수행(호출)하고 응답 결과를 Model에 담는다. Controller가 비지니스 로직을 수행하기 위해 Service 단의 로직을 호출하고 응답 결과를 Model에 전달하게 된다. Model은 View에 출력할 데이터를 담아두는 역할을 한다. Controller가 구현 로직을 전담하므로 Model에서는 구현 방법에 대해 몰라도 되고, View는 필요한 데이터를 Model에서 바로 가져다 사용하면 된다. View는 모델에 담겨있는 데이터를 가져다가 화면을 그리는 일에 집중한다. Java 구현 코드를 넣을 필요가 없어지고 HTML에 집중할 수 ..
https://www.acmicpc.net/problem/12099 🐢 설명 lower bound, upper bound를 사용해서 풀면 되는 문제이다. 주어진 음식 메뉴를 매운 순서로 정렬하고, 먹을 수 있는 범위인 u, v를 가지고 lower bound, upper bound를 구해준다. 이 범위내에서 먹을 수 있는 달달한 메뉴를 찾아야 하므로 반복문을 통해 x, y 범위 비교해준다. 2번에서 카운트한 개수가 곧 매운맛과 달달함이 충족된 메뉴의 개수이다. 총 Q번의 범위에 대해 N개의 메뉴들에 대해 이분탐색을 하고, 해당 범위 내에서 다시 탐색을 하게 된다. 따라서 대략 O(QN)의 시간 복잡도를 갖게 된다. 🐢코드 public class 점심메뉴_12099 { static int N; static ..
https://www.acmicpc.net/problem/23830 🐢 설명 아주 간단한 이분탐색 문제이다. 결국 K를 찾기 위해 가능한 범위를 지정한 후 해당 범위내에서 K값을 지정해보고 이때의 평균값과 선생님이 원하는 S값과의 비교를 통해 범위를 조정해가면 된다. 평균을 높이기 위해서는 결국 K를 올려야 하므로 left = mid + 1, 평균을 낮추기 위해서는 K를 낮추기 위해 right = mid 로 해주면 된다. 가능한 가장 작은 K를 구해달라 하였으므로 lower bound로 구하면 된다. 여기서 놓칠 수 있는 부분은 문제의 첫 문장에 양의 정수 K라고 하였으므로 K의 하한 범위를 0이 아닌 1로 잡아줘야 한다. 🐢코드 public class 제기차기_23830 { static int N; s..

https://www.acmicpc.net/problem/23829 🐢 설명 이분탐색과 누적합을 이용해서 풀 수 있는 문제였다. 간단하지만 lower_bound로 구한 위치에서의 나무가 자신의 위치와의 차이 별로 따로 처리해야 하는 부분이 좀 어려웠었다. 주어진 나무들이 있고 자신의 위치가 주어진다. 이때 자신의 위치와 나무의 위치를 비교해서 모든 거리의 합을 각 위치별로 출력하면 되는 문제이다. 이때 모든 나무들을 먼저 정렬하고, 누적합을 만들어 준다. 정렬된 나무들에 대해서 자신보다 크거나 같은 최초의 나무 위치를 구하기 위해 lowerBound()를 이용해 구한다. 이 작업은 logN 이므로 10만개의 나무에 대해 빠른 비교를 할 수 있다. 이렇게 구한 위치의 나무가 자신의 위치와 차이가 어떻냐에 ..
JSP - Java Server Page Servlet 만을 가지고 HTML 화면을 만들어내는 것이 매우 힘든 작업이므로 (문자열로 타이핑해서 만들어야 한다) HTML 코드에 자바 코드를 넣을 수 있는 방식을 개발한 것이다. HTML 코드의 자동완성 및 디버깅을 용이하게 할 수 있으며 서블릿의 response, request 인자를 그대로 사용할 수 있다. 또한 자바 객체를 import 해서 사용할 수 있으며, 자바 코드를 넣을 수 있다. JSP 확장자 HTML은 맨위에 language="java"를 꼭 넣어줘야 한다. 회원가입 JSP를 이용해서 HTTP Form을 생성한다. Servlet 에서 만들지 않고 HTML 파일 자체로 만들 수 있다. username: age: 전송 회원저장 자바 구현 코드..

Servlet만을 사용해서 회원 관리 구현 요청과 응답을 서블릿을 이용해서 처리할 수 있다. 이를 이용해서 구현해본다. 서블릿으로 요청 메시지, 응답 메시지, 조회 결과 등을 구현한다. 모든 요청/응답 HTTP 메시지의 Header 정보 및 Body 값을 자바 코드로 세팅해줘야 한다. 회원 저장 요청 FORM 서블릿 저장한 회원의 정보를 받는 HTML FORM을 만들어야 한다. 이를 위한 서블릿을 생성한다. HTML로 POST 형식의 Form을 만들 것이므로 ContentType은 text/html 로 하고 인코딩은 utf-8로 한다. Form은 HTML 코드를 문자열로 생성한다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/membe..

SYN Flooding Attack란? SYN ACK는 4 Layer 계층에서 TCP의 3-way hadnshake를 맺을 때 교환하는 비트 정보이다. 기본적인 TCP 3-way handshake 클라이언트가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. 클라이언트가 SYN 응답으로 ACK를 보낸다. SYN Flooding Attack 방식의 경우 공격자가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. (ACK를 기다리며 대기한다.) 공격자는 ACK를 보내지 않고 대량의 SYN을 보낸다. (이때 패킷은 내용은 없고 헤더에 SYN 비트만 체크되어있다) 서버는 SYN에 대응하기 위해 사용하지 않는 포트를 계속 할..
https://www.acmicpc.net/problem/19845 🐢 설명 넴모넴모들이 왼쪽아래에 모여있다는 조건이 있으므로 쉽게 풀 수 있다. 우리가 구해야할 값은 레이저의 설치 좌표가 주어졌을 때 오른쪽에서 지울수 있는 넴모의 개수와 자신의 위 행에서 지울 수 있는 넴모의 개수의 합을 구하기만 하면 된다. 오른쪽에서 지울 수 있는 넴모 개수 구하기 이때 오른쪽은 비교적 쉽게 구할 수 있는데 각 층마다 알려준 넴모의 개수가 있으므로 이를 이용해서 계산하면 된다. (y, x) 레이저 설치 시 지울 오른쪽 넴모의 개수 = 층에 존재하는 넴모 개수 - x (레이저 열 위치) + 1 (자기위치) 를 통해 구할 수 있다. floorInfo[row - 1] - col + 1 만약 음수라면 0으로 치환해주는걸 잊..

서블릿 응답 클라이언트로 부터 온 요청을 담당하는 서블릿이 request를 처리하고 response를 보낸다. 이 response도 HTTP 프로토콜로서 형식을 만들어줘야 한다. 직접 문자열을 만들어서 반환해도 되지만 상상만해도 머리가 아프다. 이거를 서블릿이 필요한 값만 전달해주면 알아서 응답 메시지로 만들어서 반환해 준다. 응답코드, 응답 형식, 인코딩 설정, 캐시 설정 등을 할 수 있다. 응답 헤더 작성 Response Header의 구성요건을 직접 문자열로 작성하는 방법 @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpSer..

Servlet Java는 서블릿을 이용해서 HTTP 요청을 처리하게 된다. 서블릿은 개발자가 HTTP 요청을 쉽게 처리할 수 있도록 만들어진 기술로, 서블릿 대신 직접 문자열 파싱으로 프로토콜과 주어진 매개변수, 인코딩 형식 등 다양한 옵션 및 값을 처리해도된다. 하지만 이것이 너무 힘드니깐 만들어진 존재이다. 서블릿 정리 글 ----> [Web/정리글] - 자바 웹 역사 정리 서블릿 응답 처리 @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") public class RequestParamServlet extends HttpServlet { @Override protected void service(HttpServletRe..
- Total
- Today
- Yesterday