Servlet 정리
·
Web/정리글
사용자가 웹 페이지 form(HTML form)을 통해서 자신의 정보를 입력 (INPUT) servlet의 doGet() 또는 doPost() 메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색 이 정보를 이용하여 사용자의 요청에 맞는 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공 (OUTPUT) 1. HTML Form input elements(Ex. 텍스트 상자)가 포함된 웹 페이지의 한 부분 사용자가 입력한 정보 (form contents)를 웹 서버로 전송하기 위한 submit element (Ex. 버튼)이 존재한다 action에는 form을 처리하는 서버 쪽 URL을 명시한다 클라이언트(Browser)가 요청하는 URL 정보 요청을 보낼 때 서버의 I..
Spring MVC Architecture 정리
·
Web/정리글
MVC Architecture 정리 MVC architecture란 무엇일까? Model, View, Controller를 분리한 디자인 패턴을 말한다. Controller 컨트롤러는 데이터와 사용자 인터페이스 요소를 이어주는 중간 다리 역활을 한다. 사용자가 데이터를 수정하는 등 '이벤트'를 처리해야 함을 의미한다. Servlet (service) 요청 객체를 찾는 흐름 : Controller -> Service -> Dao -> DB [요구사항] 모델이나 뷰에 대해서 알고 있어야 한다. View와 Model 사이의 인터페이스 역활을 한다. 모델과, 뷰는 서로의 존재를 모른체 변경을 외부로 알리고, 수신하는 방법만 알고 있으므로 이를 컨트롤러가 중재해야한다. 컨트롤러는 뷰와 모델에 명령을 보낼 수 있다..
(백준) 호석사우루스 - 22255 [JAVA]
·
알고리즘/백준
https://www.acmicpc.net/problem/22255 22255번: 호석사우루스 (1, 1) -> (2, 1) -> (2, 2) -> (2, 3) -> (3, 3) -> (3, 4) -> (4, 4) -> (5, 4) -> (5, 5) 8번 만에 갈 수 있고 이게 최소이다. www.acmicpc.net 🐢 해설 방문처리가 복잡했던 문제였다. 무엇보다 첫번째 시작이 1번이고 이동하는 횟수 N번이 3N, 3N + 1, 3N + 2에 따라서 이동할 수 있는 방향이 달라지는 것이 중요했다. -> 이동횟수 별 탐색 방향 : (N % 3 == 1 : 상하, N % 3 == 2 : 좌우, N % 3 == 0 : 상하좌우) 한번 방문 했다고 바로 방문 처리를 하면 안될 뿐더러 특정 방향을 가질때 어디로 ..
(백준) 얼음 미로 - 20926
·
알고리즘/백준
https://www.acmicpc.net/problem/20926 20926번: 얼음 미로 탐험가 테라는 얼음 미로에 갇혔다. 얼음 미로의 바닥은 빙판으로 되어 있어 발을 내디디면 바위에 부딪힐 때까지 미끄러진다. 예를 들어, 위 그림에서 테라가 왼쪽 방향으로 이동한다면 중간에 www.acmicpc.net 🐢 해설 시작하는 위치를 플레이어라고 하면 플레이어는 이동할 때 1)나가거나 2) 구멍에 빠지거나 3) 벽에 부딪히거나 4) 탈출하거나 하는 총 4가지 경우로만 이동할 수 있다. 이때 얼음을 타면서 최소한의 시간으로 탈출하는 경우를 찾아야 하는데 이를 위해 큐에 담겨있는 이동하는 플레이어 객체를 소요시간이 낮은 순으로 우선 탐색하기 위해 우선순위 큐를 이용했다. 초기 플레이어 위치를 큐에 넣어서 BF..
(백준) 트리의 기둥과 가지 - 20924
·
알고리즘/백준
https://www.acmicpc.net/problem/20924 20924번: 트리의 기둥과 가지 첫 번째 줄에는 노드의 개수 $N$($1 \le N \le 200\,000$)과 루트 노드의 번호 $R$($1 \le R \le N$)이 주어진다. 이후 $N-1$개의 줄에 세 개의 정수 $a$, $b$, $d$($1 \le a, b \le N$, $ a \ne b$)가 주어진다. 이는 $a$번 www.acmicpc.net 🐢풀이 일단 트리 구조임을 알 수 있으므로 인접리스트로 트리 구조를 구현했다. 이후 기둥을 구하는 부분과 기가(G)에서 가지를 구하는 부분으로 나눠서 접근했다. 무엇보다 주어지는 간선의 정보가 방향이 아닌 무방향이므로 양방향으로 연결시켜줘야 했고, 따라서 각 노드에 대한 방문 체크를 ..
웹 애플리케이션 API 개발 (DTO)
·
스프링/스프링부트 API 설계 정리
웹 애플리케이션 개발 시 서비스를 위해서 api를 이용한 통신을 하게 되므로 이를 구현해보겠다. 이때, DB 및 repository에서 사용되는 Entity가 아닌 데이터 전달용도로 DTO객체를 따로 생성해서 사용해야 되는데 이에 대해 알아보겠다. DTO : Data Transfer Object 회원 생성 API 회원 생성 api POST ("api/v2/members") { "name": "최똥꼬", "email": "dnstlr2999@naver.com7", "address": { "zipcode" : "13928", "streetAdr": "안양시 동안구 99로 999", "detailAdr": "999-999" } } Member 객체 @Entity @Getter @Setter public cla..
(백준) 숫자 할리갈리 게임 - 20923
·
알고리즘/백준
https://www.acmicpc.net/problem/20923 20923번: 숫자 할리갈리 게임 첫째 줄에는 도도와 수연이가 가지는 카드의 개수 $N$($ 1 \leq N \leq 30\,000$)과 게임 진행 횟수 $M$($ 1 \leq M \leq 2\,500\,000$)이 주어진다. 둘째 줄부터 $N$개의 줄에는 띄어쓰기로 구분하여 도도와 수연 www.acmicpc.net 🐢 접근방법 문제에서 나오는 덱(Deque) 자료구조를 사용하는 문제였다. su와 do에게 주어진 카드들을 자신의 차례 때마다 하나씩 꺼내고 조건을 확인하고 (자신의 소유 개수가 0개인지, 나의 승리 조건 인지, 상대의 승리 조건인지) turn수를 증가시키고 종료시간일 경우 종료하도록 했다. 자신의 차례때 꺼낸 카드는 순서대..
(백준) 음악프로그램 - 2623
·
알고리즘/백준
https://www.acmicpc.net/problem/2623 2623번: 음악프로그램 첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 www.acmicpc.net 🐢문제설명 대표적인 위상정렬 문제이다. 각 pd별로 원하는 순서가 있고 모든 pd의 요구사항에 맞는 순서대로 가수를 줄세워야 한다. 이를 위해서는 의존관계를 명시해주기 위해서 인접리스트와 진입차수를 위한 배열을 사용하면 된다. 인접리스트이 용도는 A가수가 부르고 난 후 다음에 부를 수 있는 B가수를 이어주기 위한 용도이고, 진입 차수는 자신 앞에 선행되어야 할 가수의 수를 적..
(백준) 보스몬스터 전리품 - 20005
·
알고리즘/백준
https://www.acmicpc.net/problem/20005 20005번: 보스몬스터 전리품 입력의 첫째 줄에는 멤멤월드의 지도의 크기를 나타내는 두 정수 M(6 ≤ M ≤ 1000), N(6 ≤ N ≤ 1000)과 플레이어의 수 P(1 ≤ P ≤ 26)가 주어진다. M은 지도의 세로 길이, N은 지도의 가로 길이이다. 입 www.acmicpc.net 🐢해결방법1 (나의 풀이법 - 추천하지 않음) 구현 + BFS로 접근했다. 각 유저들은 1초마다 이동을하고, 보스를 만나면 죽을 때 까지 그자리에서 계속 보스를 때리고, 아직 보스를 만나지 않은 플레이어는 더 이동을 하게 했다. 플레이어는 알파벳 소문자로 들어온다고 했으나 순차적이다라는 말은 따로 없었으므로 크기가 26인 배열을 만들었고, 각 플레이..
다익스트라(Dijkstra)
·
알고리즘/알고리즘 정리본
🐢 다익스트라의 사용 Q. 다익스트라는 언제 사용하는 알고리즘일까? A. 시작점이 주어졌을때, 최소 비용으로 (혹은 최대 이익)으로 정점들을 거쳐서 다른 모든 정점까지 가는 비용을 알 수 있다. 🐢 기본 구조 // pair는 다음 노드로 가기위한 비용과 다음 노드의 정보가 들어있다 ArrayList[] adj = new ArrayList[N]; // dp는 현재 노드에서 특정 노드까지의 비용을 업데이트하기 위한 배열 int dp[N]; // 시작점을 제외한 모든 노드들에 대해 비용을 최대로 잡아준다, 시작점은 0 for (int i = 0; i < N; i++) dp[i] = INF; dp[S] = 0; adj 리스트 배열에 모든 간선들에 대해서 시작점을 기준으로 넣어준다 dp[i] == S부터 i까지의..