전체 글

창의의 개발블로그입니다.
· Spring
개요 QueryDSL을 통해서 JPQL을 동적으로 구성할 수 있는 법을 공부하고 Spring Boot에 적용하는 방법을 찾아보고 적용시킨 방법을 기록한다. QueryDSL은 JPA에서 공식적으로 제공하는 JPQL 빌더가 아니기 때문에 따로 구성해주어야 한다. 적용시킨 Spring Boot 버전과 의존성들은 다음과 같다. version : 3.2.4 java version : 17 Spring Data JPA lombok MariaDB Driver Spring MVC 환경이 다르면 문제가 발생할 수 있다는 점, 안된다면 댓글을 남겨주세요 본론 Gradle에 QueryDSL 의존성 추가 // query dsl 버전 명시해야 jakarta사용 (javax X) implementation 'com.queryds..
· 알고리즘
개요 알고리즘 공부를 하면서 비트마스킹이라는 기법이 존재한다는 것을 알았고 자바를 통해서 비트를 어떤식으로 쓸 수 있는지 감을 좀 잡고 비트를 어떻게 사용하고 어떻게 쓸 수 있는지 알아보았다. 본론 비트 마스킹은 말그대로 비트를 사용한 연산들을 의미한다. 비트 연산은 low level 연산이기 때문에 기존의 연산들보다 속도가 높고 메모리 사용량도 훨씬 낮다. 집합 혹은 true/false 대신에 비트 마스킹을 사용할 수 있는 것으로 보이며 자바의 boolean 타입은 1Byte지만 사실 비트 연산으로 이것을 표현하면 1비트로 표현할 수 있다. 집합과 true false 비트 마스킹을 사용해서 집합을 표현할 수 있다. // 공집합 int x = 0; // x 집합에 y 추가 (y비트를 1로 세트한다.) x..
· 백준
15787번: 기차가 어둠을 헤치고 은하수를 입력의 첫째 줄에 기차의 수 N(1 ≤ N ≤ 100000)과 명령의 수 M(1 ≤ M ≤ 100000)가 주어진다. 이후 두 번째 줄부터 M+1번째 줄까지 각 줄에 명령이 주어진다. www.acmicpc.net 문제 기차에 대한 명령이 다음과 같이 주어진다. 1 i x : i번째 기차에(1 ≤ i ≤ N) x번째 좌석에(1 ≤ x ≤ 20) 사람을 태워라. 이미 사람이 타있다면 , 아무런 행동을 하지 않는다. 2 i x : i번째 기차에 x번째 좌석에 앉은 사람은 하차한다. 만약 아무도 그자리에 앉아있지 않았다면, 아무런 행동을 하지 않는다. 3 i : i번째 기차에 앉아있는 승객들이 모두 한칸씩 뒤로간다. k번째 앉은 사람은 k+1번째로 이동하여 앉는다. ..
· 백준
2961번: 도영이가 만든 맛있는 음식 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 www.acmicpc.net 문제 재료의 신맛과 쓴맛이 주어졌을 때, 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램을 작성하시오. 풀이 해당 문제는 백트래킹을 통해서 탐색하면서 신맛과 쓴맛의 차이가 최소가 되는 값을 반환하는 문제다. 먼저 이 문제를 기본적인 boolean 배열을 사용해서 문제를 풀어보았다. 📌 boolean[]으로 문제 해결 import java.io.*; import java.util.Arrays; class Main { static boo..
· 백준
11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 문제 비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오. add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다. remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다. check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20) toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20) all: S를 {1..
· 백준
1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다. 풀이 일반적인 백트래킹 탐색과는 다른 느낌이라서 해결하지 못했고 해답을 찾아보고 이해한 내용을..
· 백준
6443번: 애너그램 첫째 줄에 단어의 개수 N 이, 둘째 줄부터 N개의 영단어가 들어온다. 영단어는 소문자로 이루어져 있다. 단어의 길이는 20보다 작거나 같고, 애너그램의 수가 100,000개 이하인 단어만 입력으로 주 www.acmicpc.net 문제 씬디는 애너그램(anagram) 프로그램을 만들어 줄 수 있는 남자를 좋아한다. 참고로 씬디는 매우 예쁘다. 애너그램 프로그램이란, 입력받은 영단어의 철자들로 만들 수 있는 모든 단어를 출력하는 것이다. 가령 "abc" 를 입력받았다면, "abc", "acb", "bac", "bca", "cab", "cba" 를 출력해야 한다. 입력받은 단어내에 몇몇 철자가 중복될 수 있다. 이 경우 같은 단어가 여러 번 만들어 질 수 있는데, 한 번만 출력해야 한다..
· 알고리즘
개요 백준 문제를 풀다가 6443번 애너그램 만들기 문제를 백트래킹으로 풀던 중 너무 많은 경우의 수가 존재해서 자바의 힙 메모리가 오바되서 문제를 해결하지 못했습니다. 그래서 어떻게 풀면 될까 고민하다가 Next Permutation 알고리즘이 존재한다는 것을 알았고 문자나 숫자를 나열하는 문제를 더 효율적으로 해결할 수 있을 것 같아서 공부하고 작성합니다. 6443번: 애너그램 첫째 줄에 단어의 개수 N 이, 둘째 줄부터 N개의 영단어가 들어온다. 영단어는 소문자로 이루어져 있다. 단어의 길이는 20보다 작거나 같고, 애너그램의 수가 100,000개 이하인 단어만 입력으로 주 www.acmicpc.net 본론 Next Permutation 알고리즘은 현재 나열된 숫자나 문자의 바로 다음 수열을 찾는 ..
창e
창의