본문 바로가기
반응형

분류 전체보기313

백준 13397 : 구간 나누기 2 https://www.acmicpc.net/problem/13397 13397번: 구간 나누기 2 첫째 줄에 배열의 크기 N과 M이 주어진다. (1 ≤ N ≤ 5,000, 1 ≤ M ≤ N) 둘째 줄에 배열에 들어있는 수가 순서대로 주어진다. 배열에 들어있는 수는 1보다 크거나 같고, 10,000보다 작거나 같은 자연수 www.acmicpc.net [ 문제풀이 ] 최적해를 구하는 문제이기 때문에 결정 문제로 변경하여 파라메트릭 서치를 활용하면 해결할 수 있는 문제이다. key 값을 기준으로 구간을 나눴을 때 M보다 작다면 정답이 가능하기 때문에 더 작은 key값을 탐색해주고, M보다 크다면 정답이 불가능하기 때문에 더 큰 key값으로 탐색해준다. import java.io.BufferedReader; i.. 2021. 9. 6.
[Spring] 서블릿 필터 vs 스프링 인터셉터 권한이 있는 사용자만 특정 URI에 접속할 수 있어야 하는 경우가 발생할 수 있다. 예를 들어 로그인된 사용자만 게시판에 글을 작성할 수 있다면, 로그인되지 않은 사용자는 게시판 작성 URI에 접속해서는 안된다. 즉, URI마다 특정 조건을 걸어서 권한이 없는 사용자를 필터링할 수 있어야 하는데 이는 서블릿 필터 or 스프링 인터셉터를 활용하면 해결할 수 있다. 공통 관심사로 분류할 수 있기 때문에 AOP를 활용해도 되지만 웹과 관련된 공통 관심사는 HTTP 헤더나 URI 정보들이 필요하기 때문에 HttpServletRequest를 제공하는 이들을 사용하는 것이 좋다. 서블릿 필터 서블릿 필터는 서블릿에서 지원하는 기능으로 서블릿 이전에 필터가 적용된다. 따라서 필터에서 적절하지 않은 요청이라 판단되면 .. 2021. 9. 5.
백준 9470 : Strahler 순서 https://www.acmicpc.net/problem/9470 9470번: Strahler 순서 지질학에서 하천계는 유향그래프로 나타낼 수 있다. 강은 간선으로 나타내며, 물이 흐르는 방향이 간선의 방향이 된다. 노드는 호수나 샘처럼 강이 시작하는 곳, 강이 합쳐지거나 나누어지는 곳 www.acmicpc.net [ 문제풀이 ] 기본적인 위상 정렬에 각 노드의 order만 관리해주면 쉽게 해결할 수 있는 문제이다. order의 조건이 2개이기 때문에 count 배열을 하나 선언하여 같은 값이 진입할 경우 개수를 저장해준다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; impor.. 2021. 9. 4.
[Spring] HTTP 메시지 컨버터 클라이언트에서 서버로 요청 데이터를 전달할 때는 주로 다음과 같은 방법을 통해 전달한다. GET + 쿼리 파라미터 POST - HTML Form HTTP Message Body 반대로 서버에서 클라이언트에 응답 데이터를 전달할 때는 다음과 같다. 정적/동적 HTML HTTP Message Body HTTP API를 제공하는 경우에는 HTTP Message Body에 JSON, XML, TEXT 형식으로 데이터를 직접 담아서 요청 및 응답을 처리한다. Spring에서는 HttpEntity 객체나 @RequestBody, @ResponseBody 어노테이션을 사용하면 데이터를 직접 매핑할 필요 없이 자동으로 요청 및 응답 데이터를 적절한 데이터 형식으로 변환해준다. @Slf4j @Controller @Req.. 2021. 9. 3.
HTTP 프로토콜 발전 대부분의 인터넷은 HTTP 프로토콜을 기반으로 통신한다. HTTP 프로토콜은 Hypertext Transfer Protocol의 약자로 TCP/IP 위에서 작동하는 인터넷상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. HTTP는 1965년부터 등장하여 부족한 성능을 개선해나가면서 현재 HTTP 3.0 버전까지 등장하였다. Naver, Google 등 다양한 웹사이트를 접속하면 여러 버전의 HTTP를 사용 중인 것을 확인할 수 있다. HTTP는 TCP/IP 계층의 Application 계층에서 동작한다. 또한 Application 계층의 프로토콜들은 추가적인 기능을 제공하기 위해 Transport 계층의 TCP or UDP 프로토콜을 활용한다. 기본적으로 HTTP는 연결 지향적이.. 2021. 9. 2.
[JPA] 영속성 컨텍스트 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이란 의미이다. JPA는 실제로 내부에서 영속성 컨텍스트를 기반으로 동작한다. 즉, 엔티티 매니저를 통해 엔티티를 Persist할 경우 DB에 저장되는 것이 아니라 영속성 컨텍스트라는 논리적인 저장소에 저장된다. 영속성 컨텍스트를 공부하기 전에 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 간단하게 알고 넘어가자. JPA는 클라이언트의 요청을 엔티티 매니저를 통해 처리하고 내부적으로 DB Connction Pool을 사용해서 DB에 접근한다. 엔티티 매니저 팩토리는 바로 엔티티 매니저를 생성해주는 친구이다. 웹 애플리케이션에서는 엔티티 매니저 팩토리를 하나 생성하여 클라이언트의 요청이 올 때마다 새로운 엔티티 매니저를 생성하여 제공한다. 이는 스프링같은 프레임.. 2021. 8. 31.
백준 1029 : 그림 교환 https://www.acmicpc.net/problem/1029 1029번: 그림 교환 첫째 줄에 예술가의 수 N이 주어진다. N은 2보다 크거나 같고, 15보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 N개의 수가 주어진다. i번째 줄의 j번째 수는 j번 예술가가 i번 예술가에 www.acmicpc.net [ 문제풀이 ] 외판원 문제와 비슷한 문제로 모든 경우의 수를 탐색하면 TLE가 발생하지만 비트마스킹 + DP를 활용하여 경우의 수를 탐색하면 해결할 수 있는 문제이다. dp 테이블을 다음과 같이 정의하자. dp[i][j] : 현재 방문한 정점의 상태가 i이며 j번째 사람(현재 그림 소유)이 그림을 구매한 비용 이렇게 정의한 이유는 방문한 정점의 상태가 같은 상황에서 j번째 사람이 누구에.. 2021. 8. 31.
프레임워크 vs 라이브러리 vs API 개발자라면 프레임워크, 라이브러리, API를 모두 들어봤을 것이다. 다른 개념이지만 헷갈릴 수 있는 요소를 충분히 가지고 있기 때문에 애매하게 알고 넘어간다면 누군가 물어봤을때 대답하는데 있어 난처해지는 상황이 발생할 수 있다. 따라서 이들에 대해서 정리해보도록 하자. 프레임워크 범용 기능들을 제공해줌으로써 애플리케이션을 개발하기 쉽도록 해주는 소프트웨어이다. 덕분에 개발자는 핵심 로직에만 집중할 수 있음 Java로 Web 애플리케이션을 개발할 경우 Servlet 관련 로직들을 구현해야 하지만, Spring 프레임워크를 사용하면 이러한 부분들을 추상화시키고 @RequestMapping 같은 기능으로 쉽게 구현할 수 있게 편의성을 제공해줌 제어의 흐름을 개발자가 아닌 프레임워크가 가지고 있음 즉, 프레임워.. 2021. 8. 30.
백준 2234 : 성곽 https://www.acmicpc.net/problem/2234 2234번: 성곽 첫째 줄에 두 정수 n, m이 주어진다. 다음 m개의 줄에는 n개의 정수로 벽에 대한 정보가 주어진다. 벽에 대한 정보는 한 정수로 주어지는데, 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를, www.acmicpc.net [ 문제풀이 ] 서북동남 순서로 1,2,4,8의 값을 가지기 때문에 (1~4)번째 bit가 1인지를 확인해주면 벽이 존재하는지 판단할 수 있다. 따라서 dfs + 비트마스킹을 통해 탐색하면서 방마다 인덱스를 매겨주고 각 방의 넓이를 저장해준다. 이렇게 하면 1, 2번을 해결할 수 있다. 3번을 해결하기 위해서 벽을 제거하였는지를 판단하는 변수를 하나 두고 dfs를 수행해도 되지만 어차피 벽들.. 2021. 8. 30.
반응형