https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 문제 해결 방법 처음 문제를 접했을 때, 단순한 완전탐색 문제라고 생각했습니다. 사탕의 최댓값을 구하기 위해 모든 칸을 탐색하여 진행하는 방식을 떠올렸습니다. 마침 이동하는 범위도 (0,1) (1,0) (1,1) 이기에 범위도 신경쓸 부분이 줄어들었다 생각했습니다. 처음 작성한 코드는 아래와 같습니다. import java.io.*; import java.util.*; public ..
타임리프, Thymeleaf 특징 1. 서버 사이트 HTML 렌더링, SSR - 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용 2. 네츄럴 템플릿 : 순수 HTML을 유지하며 뷰 템플릿으로 사용할 수 있는 특징 - 순수 HTML을 최대한 유지하는 특징 - 웹 브라우저에서 파일을 직접 열어도 확인 가능하며, 서버를 통해 동적으로 변경된 결과 확인 가능 3. 스프링 통합 지원 - 스프링과 통합하여 여러 기능을 지원한다. 선언 텍스트 - text, utext 텍스트를 출력하는 기능 - 태그 없이 출력하는 기능 - [[${data}]] HTML 엔티티 웹 브라우저는 "
요구사항 분석 상품 도메인 모델 - 상품 ID, 상품명, 가격, 수량 상품 관리 기능 - 상품 목록(조회), 상품 상세, 상품 등록(C), 상품 수정(U) 타임리프 타임리프 선언 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링되고, 기존 것을 대체된다. 붙지 않은 것은 html의 속성이 적용된다. html을 유지하면서 템플릿 기능을 할 수 있다. 타임리프 문법 속성 변경 - th:href="@{/css/bootstrap.min.css}", href="" 이 변경된다. 링크 표현 식 - th:href="@{/css/bootstrap.min.css}", url링크를 @{} 방식으로 사용한다. 리터럴 대체 - |...|, "와 '를 신경써야 했던 것을 "와 |로 사용한다. 반복 출력 - th:..
HTTP 요청 - 쿼리 파라미터, HTML FORM, HTTP 메시지 사용/META-INF/resources 1. GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징등에서 많이 사용하는 방식 2. POST - HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20 예) 회원 가입, 상품 주문, HTML Form 사용 3. HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON, XML, TEXT 데이터 형식은 주로 ..
프톤트 컨트롤러 패턴 이전의 컨트롤러의 역할을 보면 중복되는 코드가 많다. (뷰로 이동과 같은) 그래서 컨트롤러에 접근하기 전, 프론트 컨트롤러를 통해 공통 처리를 하고 온다. 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. v1 구현 - 프론트 컨트롤러 도입 urlPatterns = /fron-controller/v1의 하위 경로들은 모두 이 서블릿을 접근하게 된다. controllerMap에 저장된 URI를 통해 controller 변수에 각 컨트롤러가 호출된다. -> 중복되는 코드를 줄일 수 있었다. JSP는 이전의 코드를 그대로 사용한다. v2 구현 - 뷰 분리 뷰(jsp)로 이동하기 위해 모든 컨트롤러에 아래와 같은 코드가 반복된다. String viewPath = "..
https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 문제 해결 과정 예제 입력 1번 경우의 그림이다. 아무 것도 없는 상태에서 각 배열의 값을 DFS 방식으로 탐색하며 store라는 배열에 각 수열의 합을 채워 넣는 방식이다. 이때, store 배열은 조건에 "100,00보다 작거나 같은 수" 가 최대 20개까지 주어지니까 1~2,000,000 으로 범위를 생각하여 store의 배..
서블릿 서블릿 -> WAS에 서블릿 코드를 클래스 파일로 빌드해서, WAS에서 실행 HttpServlet을 상속받아 HttpServletRequest 객체와 HttpServletResponse 객체를 service 메서드로 관리한다. HttpServletRequest HTTP 요청 메시지를 직접 파싱해도 되지만, 불편하고 어렵다. 서블릿은 이를 파싱해주고, 결과를 HttpServletRequest 객체에 담아서 제공한다. 역할 HTTP 메서드, URL, 쿼리 스트링, message body와 같은 정보를 파싱 임시 저장소 기능 - 저장 .setAttribute(), 조회 .getAttribute 세션 관리 기능 - .getSession HttpServletRequest의 정보 조회 start-line 조..