분류 전체보기 681

[QueryDSL] QueryDSL이란?

QueryDSL이란? DSL는 Domain Specific Language의 약자로, 특정 영역에 특화된 언어를 의미한다. 그런 의미에서 QueryDSL은 쿼리생성에 특화된 프레임워크를 의미한다. 그럼 QueryDSL이 필요한 이유는 무엇일까? JPA는 객체지향어플리케이션과 관계형DB 사이의 패러다임 불일치를 해결하는 프레임워크이다. 개발자는 객체지향 관점으로 개발하고 JPA프레임워크는 자동으로 SQL쿼리문을 생성한다. SQL문이 자동으로 생성되니 개발자는 SQL 관점 프로그래밍을 하지 않아도 된다. 그러나 완전한 분리는 불가능하다. 복잡한 쿼리 생성을 위해, JPA는 JPQL을 지원한다. [JPA] JPQL이란? JPA는 객체지향Application과 관계형DB 사이의 패러다임 불일치 문제를 해결한다...

Dev/JPA 2023.07.21

[PS] BOJ2352 반도체 설계 ( LIS ) with JAVA

https://www.acmicpc.net/problem/2352 2352번: 반도체 설계 첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주 www.acmicpc.net ◎ 문제풀이 선이 겹치지 않도록 회로를 구성할 때, 회로가 가질 수 있는 최대 선의 개수를 구하는 문제이다. 1 부터 4까지 선을 하나씩 추가하며 최적의 회로를 만들어 가면 된다. ( Greedy ) 회로에 Start Point 순서대로 선을 하나씩 추가하려고 한다. '현재' 회로의 End Point 중 가장 큰 EndPoint가 추가하려는 선의 End Point보다 작으면 선..

문제풀이 2023.07.21

[PS] BOJ2805 나무 자르기 ( BinarySearch ) with JAVA

https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net ◎ 문제풀이 여러 개의 나무를 동일한 크기로 잘랐을 때, 자투리로 남는 나무를 가져가는 문제이다. 원하는 만큼의 나무를 가져가려면 어느 정도 동일한 크기로 잘라야 할까? 자르는 크기를 h라고 하면 h는 1 부터 가장 큰 나무의 크기 사이에 있다. 범위 안에서 적절한 값을 구하는 문제인데, 나무의 크기가 1 ≤ M ≤ 2,000,000,000 이므로 엄청나게 ..

문제풀이 2023.07.21

[PS] BOJ7562 나이트의 이동 ( BFS ) with JAVA

7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net ◎ 문제해결 이동시 비용이 동일하고 목표까지 최단거리를 구하는 문제이니 BFS 알고리즘으로 풀어야 하는 문제이다. ◎ 코드 package org.example.bfs; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.Stri..

문제풀이 2023.07.21

[SpringDataJPA] Auditing

등록날짜, 등록자, 수정날짜, 수정자 데이터는 유지보수에 중요한 요소이다. 그러므로 엔티티는 위 요소를 담고 있어야 한다. 그러나 모든 엔티티에 이를 동일하게 생성한다면 엄천난 중복코드를 만들어 내게 된다. 그래서 JPA는 @MappedSuperclass를 제공하여 문제를 해결한다. @MappedSuperclass가 선언된 클래스에 공통속성을 생성하고 엔티티가 이를 상속하면 DB에 레코드가 생성될 때, 공통속성의 컬럼이 생성된다. JPA가 제공하는 Auditing @MappedSuperclass @Getter public class JpaBaseEntity { @Column(updatable = false) //수정 불가 private LocalDateTime createdDate; private Loc..

Dev/JPA 2023.07.20

[PS] BOJ1541 잃어버린 괄호 ( greedy ) with JAVA

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net ◎문제풀이 규칙을 발견하면 쉬운 문제이다. '-' 연산이 나오면, 이후 나오는 수를 모두 괄호 안에 넣으면 괄호 안 모든 연산이 빼기가 된다. 수식이 나오면 수학으로 단순화하려는 시도가 중요한 문제였다. ◎코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; //BOJ1541..

문제풀이 2023.07.20

[PS] BOJ12015 가장 긴 증가하는 부분수열2 ( LIS ) with JAVA

12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net ◎ 문제풀이 DP는 수열에서 나올 수 있는 부분수열의 모든 경우에서 조건에 맞는 경우를 구하는 문제이다. 이때, 부분수열의 조건이 '가장 길고'(Longest) '증가하는'(Incresing) 부분수열(Subsequence)를 구하는 문제라면, LIS( Longest Increasing Subsequence) 알고리즘 풀이라 생각하면 된다. 처음에 이중for문을 만들어서 접근하였는데, 시간초과가 발생했다. 수열의 크기가 최대 1,000,000이므로 이중for으로 ..

문제풀이 2023.07.19

[SpringDataJPA] 사용자정의 인터페이스

스프링데이터JPA의 철학은 개발자가 작성한 리포지토리 인터페이스를 토대로 그 구현체를 자동생성하여 전달함에 있다. 그러나 스프링데이터JPA가 자동생성할 수 있는 구현체 로직은 JPA에 국한되어 있다. 동적쿼리를 위한 QueryDSL을 사용하거나 JPA가 아닌 MyBatis를 사용하거나 Spring JDBC Template을 사용하는 등의 스프링데이터JPA가 지원할 수 없는 로직을 담은 리포지토리 구현체는 자동생성 할 수 없다. 이런 경우, 개발자가 구현체를 직접 구현해야 한다. 스프링데이터JPA는 개발자가 구현한 구현체를 토대로 구현체 객체를 프록시로 자동생성하여 Bean으로 제공한다. 예를 들어보자. 개발자가 MemberRepository 인터페이스를 작성하고 JpaRepository를 상속하면 스프링..

Dev/JPA 2023.07.18

[PS] BOJ2109 순회공연 ( greedy ) wtih JAVA

https://www.acmicpc.net/problem/2109 2109번: 순회강연 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다. www.acmicpc.net ◎ 문제풀이 위 문제는 d일 안에 강연을 해야함이 관건이다. 5일 안에 강연을 해야함의 의미는 1~5일 사이에 강연을 해야한다는 의미이다. 그래서 처음에는 일수를 기준으로 일수마다 강연이 가능한 것 중에 최대값을 넣으려고 했다. 그랬더니 자료구조를 많이 생성해야하고 조건이 복잡해졌다. 일수가 아닌 강연을 기준으로 하면 문제가 풀린다. 강연을 하나씩 가져와서 스케..

문제풀이 2023.07.18

[PS] BOJ1654 랜선 자르기 ( BinarySearch ) with JAVA

https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net ◎문제풀이 랜선K개를 동일한 길이의 랜선 N개 이상으로 만들 때, 최대 랜선의 길이를 구하는 문제이다. 랜선 N개 이상으로 만드는 랜선의 길이는 1 ~ 랜선K개중 최대길이 사이에 존재한다. 범위 안에서 원하는 값을 탐색해야 하므로 범위를 반씩 줄일 수 있는 이분탐색을 사용해보자. 범위의 중간값으로 랜선K개를 나누었을 때 생성되는 랜선의 개수가 N개 이상이어야 한다. N..

문제풀이 2023.07.17