전체 글 669

[SpringMVC] 검증(Validation)(2) - BindingResult ( FieldError )

[SpringMVC] 요청데이터 검증(Validation)하기(1) 클라이언트로부터 요청(Request)이 들어오면, 요청 데이터는 가장 먼저 Controller에 도착한다. 그러므로 Controller에서 적합한 데이터인지 검사해야 한다. 적합하지 않은 데이터가 서버 내부로직으로 lordofkangs.tistory.com 지난 포스팅에서 HashMap으로 요청데이터 검증을 구현해보았다. 이번 포스팅에서는 Spring에서 제공하는 BindingResult 객체를 이용하여 요청데이터 검증을 구현해 보겠다. BindingResult 객체는 오류 메시지를 담는 그릇이라고 보면 된다. HashMap 자료구조에 오류 메시지를 담으면 Controller 외부에서 발생하는 오류를 핸들링하지 못한다. BindingRe..

SPRING/Spring MVC 2023.08.28

[PS] BOJ2608 로마숫자 ( string ) with JAVA

2608번: 로마 숫자 첫째 줄과 둘째 줄에 하나씩 로마 숫자로 표현된 수가 주어진다. 입력된 각 수는 2000 보다 작거나 같고, 두 수의 합은 4000보다 작다. www.acmicpc.net ◎ 문제풀이 문제가 복잡해 보이나 이해를 하면 어려운 문제는 아니다. 복잡한 개념이 들어가 있지는 않으나 구현력이 필요한 문제였다. 크게 두 가지 과정이 있다. 1) 로마 숫자를 십진법 숫자로 만들기 2) 십진법 숫자를 로마숫자로 만들기 - 로마 숫자를 십진법 숫자로 만들기 1) 로마문자와 십집법 숫자가 매핑된 Map 자료구조를 만든다. 2) 로마숫자를 좌측부터 한 문자씩 읽어온다. 3) 현재 문자는 이전 문자보다 작아야 한다. 4) 현재 문자가 이전 문자보다 크다면 XL, XC , CD ,CM ... 이런 문자..

문제풀이/String 2023.08.28

[PS] BOJ14675 단절점과 단절선 ( tree ) with JAVA

https://www.acmicpc.net/problem/14675 14675번: 단절점과 단절선 프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 트리의 정점 개수 N이 주어진다. (2 ≤ N ≤ 100,000) 트리의 정점은 1번부터 n번까지 존재한다. 다음 줄부터 N-1개의 줄에 걸쳐 간선의 정 www.acmicpc.net ◎ 문제풀이 뭔가 맥이 빠지는 문제였다. 단절점과 단절선을 없애면 트리가 그래프가 두 개 나와야 한다. 단절선은 무엇을 없애든 그래프가 2개 나온다. 그러므로 무조건 yes이다. 단절점은 단절점의 자식노드가 2개 이상이면 yes이다. 그러므로 트리를 인접리스트로 구현하여 리스트의 크기가 2이상이면 yes를 출력한다. ◎ 코드 package org.example.tree;..

문제풀이/Tree 2023.08.28

[PS] BOJ1068 트리 ( tree ) with JAVA

1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net ◎ 문제풀이 특정 노드를 삭제하면 자식 노드들도 삭제가 될 때, 리프노드의 개수를 구하는 문제이다. 풀이는 3단계로 이루어 진다. Step1) 트리를 그래프의 인접리스트 구조로 구현 각 노드의 자식노드를 List에 저장한다. 그래프의 인접리스트 방식으로 트리를 구현하는 것이다. Step2) DFS 탐색으로 노드 삭제 특정 노드를 삭제하면 자식노드와 자식의 자식노드도 삭제해야 한다. DFS탐색으로 자식의 자식까지 삭제하고 삭제 여부를 테이블 자료구조에 저장한..

문제풀이/Tree 2023.08.25

[PS] BOJ5639 이진 검색 트리 ( treeTraveral ) with JAVA

5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net ◎ 문제풀이 전위순회 결과를 가지고 이진트리를 만든 후 후위순회를 하는 문제이다. 전위순회는 ROOT -> LEFT -> RIGHT 순으로 탐색한다. 그러므로 가장 위에 있는 값이 ROOT이고 다음 값은 LEFT이다. 그리고 그 다음 값은 LEFT의 LEFT이다. LEFT의 LEFT가 없다면 ROOT의 RIGHT이다. 이 구조는 객체참조구조를 이용하면 쉽게 구할 수 있다. ◎ 코드 package org.example.tree; import java...

문제풀이/Tree 2023.08.25

[PS] BOJ1756 문제집 ( 위상정렬 ) with JAVA

1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net ◎ 문제풀이 위상정렬의 교과서 같은 문제이다. 문제풀이의 순서를 정해야 한다. 그러나 순서에는 우선순위가 있다. 즉, 각 문제는 위상이 서로 다르다. 문제A는 문제B 앞에 와야하고 문제C는 문제D 앞에 와야한다. 이렇듯, 정렬되는 순서에 어떠한 위상이 존재할 때, 위상정렬 알고리즘을 사용한다. [Algorithm] 위상정렬 (Topology Sort)이란? 위상정렬은 방향그래프를 한 정렬이다. 위 그래프는 작업 간 의존관계를 표현한..

문제풀이/Graph 2023.08.24

[PS] BOJ165000 문자열 판별 ( String ) with JAVA

https://www.acmicpc.net/problem/16500 16500번: 문자열 판별 첫째 줄에 길이가 100이하인 문자열 S가 주어진다. 둘째 줄에는 A에 포함된 문자열의 개수 N(1 ≤ N ≤ 100)이 주어진다. 셋째 줄부터 N개의 줄에는 A에 포함된 단어가 한 줄에 하나씩 주어진다. A에 www.acmicpc.net ◎문제 풀이 문자열 s가 주어질 때, 주어진 여러 개의 문자열 조합으로 s를 만들 수 있는지를 묻는 문제이다. 조합을 만드는 문제는 재귀호출로 풀면된다. 적절한 가지치기 조건을 두어 DFS 탐색을 하면 문제를 풀 수 있다. ◎코드 import java.util.Scanner; //BOJ165000 문자열 판별 ( 백트래킹 ) public class Main { public s..

문제풀이/String 2023.08.23

[PS] BOJ1715 카드 정렬하기 ( greedy ) with JAVA

1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net ◎ 문제풀이 카드 묶음을 비교하여 하나로 만들 때, 비교횟수의 최솟값을 구하는 문제이다. 비교횟수가 최소가 되려면 카드묶음이 큰 거를 가장 마지막에 비교해야 한다. 그리고 두 개의 카드묶음을 하나로 합치면 또 하나의 카드 묶음이 만들어진다. 비교횟수가 최소가 되려면 새로 생성된 카드묶음을 포함한 가장 개수가 적은 카드묶음 두 개를 합쳐야 한다. 다시말하여, 새로운 카드묶음이 추가될 때 마다 카드묶음 자료구조에서 매번 최솟값을 구해야 한다는 의미다...

문제풀이/Greedy 2023.08.23

[SpringMVC] 검증(Validation)(1) - HashMap

클라이언트로부터 요청(Request)이 들어오면, 요청 데이터는 가장 먼저 Controller에 도착한다. 그러므로 Controller에서 적합한 데이터인지 검사해야 한다. 적합하지 않은 데이터가 서버 내부로직으로 들어오는 것을 방지하기 위해서다. 실무에서는 주로 Bean Validation을 사용한다. 요청이 들어오면 요청에 맞는 DTO 객체에 요청데이터가 담긴다. DTO 필드에는 @NotNull, @NotEmpty 같은 어노테이션이 선언되어 있는데, BeanValidator는 선언되어 있는 어노테이션을 토대로 필드에 담긴 데이터를 검증한다. 그리고 검증결과를 Controller에 넘긴다. Controller는 검증결과에 따라 클라이언트에 적절히 응답하면 된다. 실무에서는 주로 이런 방식으로 요청데이터..

SPRING/Spring MVC 2023.08.22

[PS] BOJ1781 컵라면 ( greedy ) with JAVA

1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net ◎ 문제풀이 문제마다 데드라인이 정해져 있을 때, 컵라면을 최대로 몇 개까지 받을 수 있는지를 구하는 문제이다. 이 문제는 그리디 풀이에 HeapQueue를 떠올리면 간단히 풀리는 문제이다. ( 나는 떠올리지 못했다.. ) 단위시간이 1씩 늘어가면 컵라면을 받을 수 있는 개수도 바뀐다. 시간의 변화에 따른 최적해를 구해야 하므로 그리디로 접근해야 한다. 단위시간 1을 하루로 생각해보자. 한 문제를 푸는데 하루가 걸린다. 데드라인이 2일이라면 이틀 안에 풀면 된다. 최적해..

문제풀이/Greedy 2023.08.22