오답 노트 & 새로 알게 된 점 이 문제는 분할 정복에서 아마 정렬된 배열들을 합치는 부분을 코드로 구현하면 된다. 다만 N,M 크기가 크기 때문에 TLE에 조심해야한다. 처음에 ArrayList에 담아서 출력했는데 바로 TLE가 났다. 아마 이 문제를 풀 때에는 합칠 때마다 바로 출력을 해야 TLE가 나지 않을 것이다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 package..
오답 노트 & 새로 알게 된 점 1의 개수가 K개 만큼 있을 때, 집합의 개수를 최소화시켜야한다. 이 때에는 e를 늘리면서 1을 만나게 되면 cnt++을 해주고, 개수를 만족시키면 s를 한칸씩 밀면서(배열에서 빼면서) 온다. 이 때, 배열에서 뺄 때 1을 빼게 된다면 cnt--을 해줘야한다. 투 포인터 기본 문제이다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 package TwoPointers; import java.io.BufferedReader; import java.io..
오답 노트 & 새로 알게 된 점 두 포인터의 기본 문제이다. 처음에 배열의 처음부터 K까지의 값을 더해준다. 그리고 나서 s와 e를 하나씩 늘리면서 A[s]는 빼주고, A[e]는 더해주면서 최대값을 구하면 된다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package TwoPointers; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stri..
오답 노트 & 새로 알게 된 점 이 문제를 보고 내가 나중에 이걸 보고 투 포인터를 사용할 수 있을까라는 생각이 들었다. 제일 처음에 드는 생각은 당연히 O(N^2)일 것이다. 숫자 하나를 선택하고 나머지 숫자들을 다 더해보고 절댓값이 가장 작은 값을 고르는 방법이다. 하지만 N이 100,000이기 때문에 TLE가 바로 난다. 그렇다면 여기서 우리는 어떤 방법을 사용해야 시간 복잡도를 줄일 수 있을까? 배열들을 정렬하고 최소값과 최대값을 더해보자. 더한 값이 양수라면, 최대 입장에서는 최소값을 더해도 양수가 나온다면, 나머지 값들은 당연히 계산을 안해도 양수가 나올 것이다. 따라서 e를 하나 줄여준다. 더한 값이 음수라면, 최소 입장에서는 최대값을 더해도 음수가 나오니까 나머지 값들은 계산을 안해도 당연..
오답 노트 & 새로 알게 된 점 해당 문제는 아마 O(N^2)로도 풀 수 있지만 TLE 때문에 안된다. 그래서 O(N)의 방법으로 풀어야하는데, 그것이 두 포인터를 이용하는 것이다. 일반적인 두 포인터와 똑같다. sum은 [ L..R ] 범위에서, 만약 sum이 S보다 크거나 같으면 갯수를 갱신해주고, 아니면 L을 하나씩 늘리면서 해당 L을 빼줘야한다. 기본적인 두 포인터를 배웠다면 어렵지 않게 풀 수 있는 문제이다. 물론 index 접근이 너무 어렵다.. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49..
앞에서 서블릿, JSP, MVC 패턴을 배웠다. 이번에는 v1~v5로 각각 MVC 프레임워크 형식으로 코드를 바꾸게 된다. v1~v5는 차례대로 차근차근 한 개씩 변화하기 때문에 어떤 것이 변하게 되는지를 중심으로 강의를 들으면 좋다고 생각이 든다. 처음 들었을 때는 머릿 속이 엄청 복잡했다. 뒤섞인 느낌이었다. 하지만 꾹 참고 끝까지 들은 뒤에, 두 번째 들으니 머릿 속에서 퍼즐이 맞춰진 느낌이 든다. V1 V1에서는 프론트 컨트롤러를 만든다. 전에는 회원 가입 폼, 회원 목록, 회원 저장을 각각 서블릿으로 만들었다. 즉, 세 개의 서블릿 객체를 생성하여 아래와 같은 그림으로 호출하게 된다. 하지만 프론트 컨트롤러를 도입하게 되면 프론트 컨트롤러는 클라이언트들의 호출을 받아서 그에 맞는 컨트롤러를 호출..
서블릿과 JSP로 웹 애플리케이션을 만들 때 차이 처음에 서블릿은 자바 코드 안에 html이 있다 JSP는 html 안에 자바코드가 있다라는 말이 이해가 안됐다. 하지만 강의를 두번째 들을 때는 완벽하게 이해했다. 서블릿과 jsp의 비교를 위하여 같은 비즈니스 로직을 수행하는 코드를 비교해보겠다. 서블릿 이런 식으로 자바 코드 안에 html이 있다는 것이다. @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save") 을 보다시피, urlPatterns을 이용하여 맵핑한다. JSP 위의 서블릿과 비교했을 때 바로 보이는 것이 html이다. JSP는 html 안에 자바코드가 있다는 말이 두 개의 코드를 보면 바로 알 수 있다...
HTTP 요청 데이터 클라이언트에서 서버로 http 요청 메시지를 통해 데이터를 전달하는 방법을 크게 3가지로 나눠볼 수 있다. 1. GET - 쿼리 파라미터 2. POST - HMTL Form 3. HTTP message body GET - 쿼리 파라미터 이 방법은 url의 뒤에 ? 붙이고 쿼리 파라미터를 작성하면 된다. http://localhost:8080/request-param?username=kim&age=20 이러한 방식으로 작성하게 되면 username에는 kim, age에 20이 저장된다. 그리고 content-type은 존재하지 않는다. username과 age를 파라미터라고 하는데, 파라미터를 조회할 수 있는 방법이 있다. 대체적으로 getParameter라는 메서드를 사용하여 파라미..
오답 노트 & 새로 알게 된 점 이 문제를 풀면서 possible에서 구현 생각하는게 좀 힘들었다. 처음에는 가로등의 count 개수에 따라 문제를 풀었는데, 틀렸다. 다시 생각해보니 가로등의 개수는 고정되있다. possible은 높이에 따라 비출 수 있는지 없는지 true, false를 반환해야한다. 그래서 높이가 N보다 크거나 같으면 당연히 모두 비출 수 있고, 일정 높이 이상이면 무조건 true이다. 이제 true에서 가장 왼쪽 값(최소 높이)를 구하면 된다. possible에서 이제 어떻게 N까지 비출 수 있는지 확인해야한다. last라는 마지막에 비추는 값을 의미하는 변수를 만든다. 가로등이 있는 위치에서 last를 뺀 값이 높이보다 작거나 같으면 앞이 다 비춰진다. 그래서 last에 가로등이 ..
웹 서버(WS) VS 웹 애플리케이션 서버(WAS) 웹 서버 웹 서버는 HTTP 기반으로 동작하고 정적 리소스를 제공한다. 정적 리소스란 정적 HTML, CSS, JS, 이미지, 영상 등을 말한다. 웹 애플리케이션 서버 웹 애플리케이션 서버는 HTTP 기반으로 동작하고 웹 서버 기능에 정적 리소스 제공한다. 즉, 애플리케이션 로직 수행을 한다. ex) 동적 HTML, 서블릿, JSP, 스프링 MVC 우리가 스프링 부트에서 사용하는 톰캣은 WAS 중 하나로 servlet container라 할 수 있다. 클라이언트가 request할 때, 어떤 servlet을 실행할 것인지 제어한다. 웹 시스템 구성 - WEB, WAS, DB WAS, DB만으로 시스템 구성이 가능하다. 즉, 위의 사진과 다르게 HTML, ..
오답 노트 & 새로 알게 된 점 해당 문제는 매개 변수 탐색 방법을 사용하여 해결했다. 다른 매개 변수 탐색과 똑같은 문제였다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 package Binary_Search; import java.io.*; import java.util.*; public class BOJ13702 { static int atoi(String str) { return Integer.parseInt(str); } static int ..
오답 노트 & 새로 알게 된 점 해당 문제는 매개 변수 탐색 방법을 사용하여 풀었다. 이분 탐색의 범위 정하는거 중요했다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 package Binary_Search; import java.io.*; import java.util.*; public class BOJ6236 { static int atoi(Stri..