분류 전체보기
[백준] 20152 Game Addiction - Java
[백준] 20152 Game Addiction - Java
2022.08.28고등학교에서 확률과 통계를 배울 때 자주 볼 수 있는 유형이다. 대충 이런 유형으로 특정 경로를 가면 안되게 설정해놓거나 특정 방향으로만 가야 되는 제약을 걸어두고 최단 경로의 수를 구하는 문제.. 이 문제도 이전 결과를 사용하는 다이나믹 프로그래밍으로 해결할 수 있다. import java.util.*; import java.io.*; import java.math.*; public class Main { static StringBuilder sb = new StringBuilder(); static long[][] dp; static int H, N; public static void main(String[] args) throws Exception { BufferedReader br = new Bu..
[백준] 2876 그래픽스 퀴즈 - Java
[백준] 2876 그래픽스 퀴즈 - Java
2022.08.28문제를 잘 이해해야 한다. 두 책상을 고르고, 두 책상을 포함해서 그 사이에 있는 모든 책상에 대해서 퀴즈를 낸다. 이 때 책상 당 한명씩만 퀴즈를 내고, 퀴즈를 맞추는 학생들의 성적은 동일해야 한다. 즉, 같은 성적으로 연속되는 학생 수의 최댓값을 구하면 된다. 1 ~ 5 까지의 성적이 있으니 모두 구하고 최댓값을 출력하자. import java.util.*; import java.io.*; import java.math.*; public class Main { static StringBuilder sb = new StringBuilder(); static int[] dp; public static void main(String[] args) throws Exception { BufferedReader..
[Spring Web MVC] API 예외 처리
[Spring Web MVC] API 예외 처리
2022.08.26웹 페이지의 경우, 4xx / 5xx 번호마다 오류 페이지만 작성해주면 에러 페이지 관련 대부분의 문제를 쉽게 해결할 수 있다. 웹 뿐만 아니라 모바일, 서버 간의 통신 등에서 예외를 처리할 때는 HTML로 처리할 수 없고 API를 사용해서 통신해야 한다. 즉, 클라이언트에게 보여주는 HTML 화면이 아니라 API를 통해 정확한 데이터를 뿌려 줘야 한다. API 통신에는 국제적으로 정해진 약속이 없기 때문에 서버와 API를 요청하는 클라이언트가 서로 오류 응답 스펙을 정의해야한다. @RequestMapping("/error-page/500") public String errorPage500(HttpServletRequest request, HttpServletResponse response){ log.i..
[백준] 21317 징검다리 건너기 - Java
[백준] 21317 징검다리 건너기 - Java
2022.08.26dp문제인줄 알았는데.. 그냥 백트래킹만 써도 시간 초과 없이 풀린다. 보통 백트래킹으로 시간 초과가 예상되면 dp + 백트래킹을 사용해 시간을 줄이는 방법을 사용한다. 이제 백트래킹은 어느정도 구현할 줄 아니까.. 아직 익숙하지 않은 dp 부분을 좀 더 공부해보자. import java.util.*; import java.io.*; import java.math.*; public class Main { static int ans, N, K; static Stone[] arr; static final int INF = 987654321; static int dp[]; static boolean bigbig; static StringBuilder sb = new StringBuilder(); public ..
[Spring Web MVC] 예외 처리와 오류 페이지
[Spring Web MVC] 예외 처리와 오류 페이지
2022.08.26자바에서 메서드를 실행시킬 때 예외가 발생하면 해당 메서드를 호출한 메서드로 예외를 던지는걸 반복하다가, 메인 메서드에 도달했는데도 예외를 처리하지 못하면 예외 정보를 남기고 해당 쓰레드를 종료시킨다. 스프링 MVC를 사용하는 웹 애플리케이션에서는 쓰레드가 하나만 돌아가지 않는다. 사용자의 요청별로 별도의 쓰레드가 할당되고, 이 쓰레드들은 서블릿 컨테이너 내부에서 실행된다. 예외가 발생했는데 제대로 처리하지 못해 서블릿 컨테이너 외부까지 예외가 전달되면 어떻게 될까? WAS ←필터 ←디스패처 서블릿 ←인터셉터 ← 컨트롤러 (예외 생김) 차례대로 예외가 전달된다. 그럼 WAS까지 예외가 전달되면? 예외는 서버 내부에서 처리할 수 없는 오류가 발생한 것으로 간주하고 HTTP 상태코드 500번을 반환한다. 그..
[백준] 1106 호텔 - Java
[백준] 1106 호텔 - Java
2022.08.25dp[사용한 비용] = 최대로 늘어나는 고객 수... 로 dp 배열을 채워보자. dp[j] = Math.max(dp[j], dp[j - cost[i]] + effect[i]); 점화식은 위와 같다. 입력으로 들어오는 홍보 정보에 대해 dp 배열을 순회하면서, 효과가 더 커지는 경우 값을 갱신해준다. 즉, 입력으로 12 2 3 5 1 1 가 들어오면 dp 인덱스 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 dp 값 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 dp 값 0 1 2 5 6 7 10 11 12 15 16 17 20 21 22 25 26 27 이런 식으로 dp값이 갱신된다. import java.util.*; import java..
[백준] 9489 사촌 - Java
[백준] 9489 사촌 - Java
2022.08.24트리를 저장할 때 항상 리스트 배열과 행렬을 사용해야 하는 건 아니다. 위의 두 방법 말고도 배열 2개를 통해 해당 노드의 부모와 해당 노드의 값을 저장할 수 있다. 트리를 저장하는 방법은 문제에 따라 유동적으로 바꿔서 사용하자. (https://loosie.tistory.com/608 참고 블로그) import java.util.*; import java.io.*; import java.math.*; public class Main { static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new Inp..
[Spring Web MVC] Bean Validation
[Spring Web MVC] Bean Validation
2022.08.23보통 작성하게 되는 검증 로직은 빈 값인지 확인하거나 값이 특정 크기를 넘는지 확인하는 등 복잡하지 않다. 지금까지는 간단한 로직을 작성하기 위해 코드를 좀 많이 써야 됐는데, Bean Validation을 잘 활용하면 애너테이션을 기반으로 검증을 정말 간단하게 처리할 수 있게 된다. 스프링이 제공하는 Bean Validation은 애너테이션과 인터페이스의 모음으로, 구현체는 적당히 골라 사용하면 된다. 그럼 Bean Validation을 어떻게 사용하는지, 그리고 어떻게 작동하는지 살펴보자. import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.cons..
[Spring Web MVC] 데이터 검증
[Spring Web MVC] 데이터 검증
2022.08.22숫자나 문자로 작성해야 하는 폼에 잘못된 값을 넣고 서버로 데이터를 전송하면 오류 화면으로 이동된다. 이러면 사용자는 폼을 처음부터 작성해야 하는데, 이런 서비스는 사용자 친화적이지 않다. 이처럼 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 클라이언트 부분에서 자바스크립트를 통해 검증하는 방법도 있지만, 보안에 매우 취약하고 서버 단에서만 검증하면 즉각적인 고객 사용성이 떨어진다. 클라이언트와 서버에서 모두 검증하는 편이 합리적이다. 상품 등록 시 검증 로직에 부합하지 않는 정보가 입력되면 고객에게 오류 페이지를 보여주는 대신, 다시 상품 등록 폼을 보여주고 어떤 값을 수정해야 하는지 알려줘야 한다. (검증 작업은 컨트롤러에서 수행된다.) @PostMapping("/add..
[Spring Web MVC] 메세지와 국제화
[Spring Web MVC] 메세지와 국제화
2022.08.20국제화는 특정 설정별로 메세지를 다른 국가의 언어로 제공하는 작업을 말한다. HTML 파일에 하드코딩된 텍스트들을 하나의 파일에 모아서 관리하는 작업을 메세지를 관리 라고 부른다. item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 messages.properties 처럼 메세지 관리용 파일을 만들어서 HTML에 텍스트를 넣을 때 프로퍼티의 키 값으로 사용한다. 메세지 관리 아이디어에서 조금 더 생각하면 국제화 관리에 대한 아이디어를 얻을 수 있다. 여기서 국제화는 클라이언트가 요청을 보낸 언어 정보에 따라 특정 언어로 HTML을 렌더링 하는 작업을 말한다. item=Item item.id=Item ID item.itemName=..
[Spring Web MVC] Thymeleaf (2)
[Spring Web MVC] Thymeleaf (2)
2022.08.20타임리프는 스프링 없이도 잘 동작하지만, 스프링과의 통합을 위한 편리한 기능들을 많이 제공한다. 기능을 하나하나 살펴보자. 입력 폼 처리 상품명 타임리프를 사용하기 전 모델을 통해 item 객체를 넘겨준다. *{...} 은 선택 변수 식으로 th:object 에서 선택한 객체에 접근한다. ( ${item.itemName} 으로 작성해도 된다. ) th:field 는 폼에서 id / name / value 속성을 자동으로 만들어준다. (th:field 에서 지정한 이름으로 설정된다.) HTML 폼에 체크박스가 있는 경우 전송해서 POST 방식으로 서버에게 요청하면 서버에서 요청 값을 확인 시 체크박스가 선택된 경우 해당 값이 true 로, 체크박스가 선택되지 않은 경우 해당 값이 null로 초기화 돼 있다..
백트래킹 정리
백트래킹 정리
2022.08.191 ~ N 중 M개를 뽑아야 한다. 1. 중복 없이 뽑아보자. for(int i=1; i