분류 전체보기
-
백준 2357번 최솟값과 최댓값 (Python)알고리즘 2023. 9. 6. 11:11
N개의 정수가 주어질 때, 구간 a~b 사이에 최소, 최대값을 찾는 문제입니다. 아이디어 1. 세그먼트 트리 주어진 숫자 개수 N과 구간 쌍 M개의 범위가 (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 100,000)이므로 모두 탐색하면서 찾는다면 시간 초과가 발생할 것으로 예측됐습니다. 그래서 세그먼트 트리를 활용하게 됐습니다. 세그먼트 트리는 데이터가 연속적으로 존재할 때 특정 범위의 데이터의 합을 구하는 방법입니다. 세그먼트 트리 5 3 8 11 2 9 4 14 8 6 의 연속된 데이터가 있다고 가정해보도록 하겠습니다. 이 숫자들 중 여러 개의 특정 구간의 숫자 합을 구할 때, 계속해서 반복을 통해 구하게 된다면 O(N) 시간이 걸리게 되므로, 데이터의 개수가 많아진다면 시간 초과가 발생해 불가능하..
-
JPA @Query, Native Query, Converter백엔드 2023. 9. 5. 17:37
@Query @Query는 쿼리 메서드의 커스텀 버전입니다. 쿼리메서드만으로 거의 모든 조회 쿼리를 작성할 수 있지만, 2가지 경우에서 @Query가 중요한 역할을 할 수 있습니다. 1️⃣ 첫 번째는 쿼리 메서드의 가독성에 문제가 생길 경우입니다. 쿼리 메서드의 이름이 길어질 경우 사용이 어려워질 수 있습니다. public interface BookRepository extends JpaRepository { ... List findByCategoryIsNullAndNameEqualsAndCreatedAtGreaterThanEqualAndUpdatedAtGreaterThanEqual(String name, LocalDateTime createdAt, LocalDateTime updatedAt); } 위와..
-
백준 17472번 다리 만들기 2 (Python)알고리즘 2023. 9. 5. 10:47
섬으로 이루어진 나라가 있고 모든 섬을 다리로 연결하려고 할 때, 모든 다리의 길이의 합이 최소가 되도록 해야합니다. 다리의 길이는 최소 2여야 하고, 다리는 직선 모양으로 중간에 방향이 바뀌면 안 됩니다. 방향이 가로인 다리는 무조건 두 섬이 가로 방향으로 섬과 인접해야지만 두 섬이 연결됩니다. 방향이 세로일 경우는 무조건 두 섬이 세로 방향으로 섬과 인접해야지만 두 섬이 연결됩니다. 다리는 교차가 가능하며 총 다리의 길이를 구할 때, 겹쳐진 부분은 각 다리의 길이에 모두 포함되어야 합니다. 이번 문제는 보자마자 조금 시간이 오래 걸릴 것으로 예상되었습니다. 하지만, 각 조건이 1 ≤ N, M ≤ 10, 3 ≤ N×M ≤ 100, 2 ≤ 섬의 개수 ≤ 6 적은 숫자들로 구성된 것을 확인했고, 구현만 한..
-
JPA Cascade, OrphanRemoval백엔드 2023. 9. 4. 18:27
Cascade는 영속성 전이라고 합니다. 객체에서 다음 객체로 영속성을 보내준다는 의미입니다. Cascade는 연관관계가 있을 경우 설정할 수 있습니다. CascadeType public enum CascadeType { /** Cascade all operations */ ALL, /** Cascade persist operation */ PERSIST, /** Cascade merge operation */ MERGE, /** Cascade remove operation */ REMOVE, /** Cascade refresh operation */ REFRESH, /** * Cascade detach operation * * @since 2.0 * */ DETACH } Cascade란 Entity가 ..
-
백준 1781번 컵라면 (Python)알고리즘 2023. 9. 4. 11:24
N개 문제의 데드라인과 문제를 맞힐 경우 주어지는 컵라면의 개수가 있을 경우 N시간 안에 받을 수 있는 최대 컵라면 개수를 구하는 문제입니다. 아이디어 1. 컵라면의 개수로 내림차순 정렬 우선 문제를 풀었을 때 받을 수 있는 컵라면의 개수가 많은 것부터 푸는 것이 좋다고 생각했습니다. 그래서 1~N 각 초마다 문제를 풀 경우 해당 초에 얻은 컵라면의 개수를 저장할 수 있는 배열을 선언하고, 데드라인 내에 문제를 풀 수 있다면 해당 초에 컵라면의 개수를 저장하도록 했습니다. 이 후 배열 원소의 총합을 답으로 출력했습니다. ... # resolvedProblems에 해당 초에 푼 문제의 컵라면 개수를 저장 for deadline, ramen in problems: for i in range(deadline,..
-
백준 2098번 외판원 순회 (Python)알고리즘 2023. 9. 1. 12:27
1번부터 N번까지 N개의 도시가 있고 어떤 도시에서 출발해 N개의 도시를 모두 거쳐 다시 원래의 도시로 돌아온느 순회 여행 경로를 찾아야합니다. i 도시에서 j 도시로 이동할 때 드는 비용이 W[i][j]이고 W[i][j] != W[j][i] 일 수 있고, W[i][j]==0 일 경우 i 도시에서 j 도시로 가는 경로는 없다고 합니다. 순회 여행 경로 중 가장 적은 비용을 들이는 경로를 구하면 됩니다. 이번 문제의 경우 주어진 시간 내에 풀지 못해 풀이를 참고하고 다시 풀이하게 되었습니다...🥺 아이디어 아이디어 1. 어떤 도시를 출발지로 할 것인지 문제에서 항상 순회할 수 있는 경우만 입력으로 주어진다고 알려주었습니다. 그러므로 어떠한 경우에도 순회는 가능합니다. 1~N의 모든 도시를 순회하고, 마지막..
-
백준 3109번 빵집 (Python)알고리즘 2023. 8. 31. 14:31
R * C 크기의 지도가 주어집니다. 첫 번째 열에서 마지막 열까지 가스관을 연결하려고 할 때, 건물이 있는 곳이나 가스관이 이미 설치된 곳에는 새로운 가스관을 설치하지 못합니다. 모든 가스관은 첫 번째 열에서 마지막 열로 이동을 하고 한 지점에서 다음 지점으로 가스관을 연결하는 방법은 오른쪽 위 대각선, 오른쪽, 오른쪽 아래 대각선 방향 3가지가 있습니다. 가스관을 설치할 수 있는 최대 개수를 구하는 문제입니다. 아이디어 1. (모든 경우의 수 탐색) 모든 경우의 수를 dfs로 재귀를 통해 가장 많은 경우의 수를 찾아보려고 했습니다. 하지만, 문제에서 주어진 조건이 (1 ≤ R ≤ 10,000, 5 ≤ C ≤ 500)으로 모든 경우의 수를 찾아보기 위해서는 최악의 경우 10,000 * 500 * 3 이..
-
Spring IOC, DI, AOP백엔드 2023. 8. 26. 11:06
Spring에 관해서 Spring 1.0 버전은 2004년 3월 출시되었습니다. 20년 정도의 세월 동안 자바 엔터프라이즈 어플리케이션 개발에서 정상의 위치를 차지하고 있습니다. 스프링 프레임워크의 구성은 20여가지로 구성되어 있습니다. 이러한 모듈들은 스프링의 핵심기능을 제공해주며, 필요한 모듈만 선택하여 사용 가능합니다. (스프링 프레임워크 모듈) 시대의 변화에 따라 마이크로서비스 아키텍처로 변환, 계속해서 진화하고 있습니다. 2000년대 초반 자바 EE 어플리케이션은 작성/테스트가 매우 어려웠으며, 한 번 테스트 하기가 번거로웠습니다. 이로 인해 느슨한 결합이 된 어플리케이션 개발이 힘든 상태였으며, 특히 데이터베이스와 같이 외부에 의존성을 두는 경우 단위 테스트가 불가능했습니다. 이러한 점들을 보..