전체 글 (276) 썸네일형 리스트형 Graph Theory - Concept 해당 문제는 "이것이 코딩 테스트이다" 책을 참고하여 제작하였습니다. 크루스칼 알고리즘 사용시 findParent 마지막에 한번 더 돌려줄 것. 그래프 알고리즘의 종류 - DFS/BFS (큐, 재귀함수) - 다익스트라 (우선순위 큐(최소 힙, 최대 힙)) - 크루이드 워셜 (삼중 반복문) - 크루스칼 알고리즘 (그리디 알고리즘으로 분류) - 위상 정렬 알고리즘 (큐, 스택 자료구조로 분류) 최소 힙, 최대 힙 - 트리 구조로서 부모노드가 자식노드보다 크거나 작거나 한 구조 그래프 vs 트리 - 그래프 방향성 : 방향 그래프 or 무방향 그래프 순환성 : 순환 or 비순환 루트 노드 : 없음 부모 자식 관계성 : 없음 모델 : 네트워크 모델 - 트리 방향성 : 방향 그래프 순환성 : 비순환 루트 노드 : .. JPA - Query DSL Method Query DSL의 메서드를 정리해보고자 한다. Entity Mangager를 사용하기에 메서드가 동일하다 1. Basic Structure QUser user = QUser.user; User result = queryFactory // Select .select(user) .from(user) .where(user.userName.eq("name")) .fetchOne(); // Update .update(user) .set(user.name, "name_changed") .where(user.userName.eq("name")) .execute(); // Delete .delete(user) .where(user.userName.eq("name")) .execute(); - Delete Join은 .. JPA - Query DSL Query DSL - SQL(관계형 DB 언어, 테이블을 대상으로 함.), JPQL(Spring과 DB를 매핑하는 Spring형 관계형 DB 언어, 객체를 대상으로 함.) 를 대신하여 JPA를 코드로 작성하는 방법 - Spring내의 객체와 매핑되는 QClass라는 객체를 생성하여 이를 기반으로 쿼리를 실행. (쉽게 생각하면 QClass는 @Entity의 복사본, 컴파일시 만들어진다.) 장점 - 컴파일시 오류를 발견 가능 (Native Query를 사용하는 경우와 JPA를 사용하는 경우는 결과적으로 SQL문을 직접 작성하는 경우가 생기거나 적어도 칼럼명 등 개발자가 작성하는 부분이 생기는데 컴파일 시 오류가 나는지 알 수 없어서 나중에 오류가 발생할 경우가 크다. 하지만 Query DSL은 오류를 컴파일.. Programmers - 큰 수 만들기 with JAVA (V) 문제 문제는 굉장히 간단하다. 주어진 숫자에서 순서를 바꾸지 않고 K만큼의 수를 삭제하여 가장 큰수를 만드는 것이다. 예를들어, 18403, k=2일때, 843이 되는 것이다. 아이디어 및 로직 우선적으로 아이디어는 앞에서부터 삭제할지 여부를 판단하는데 현재 값이 앞에 있는 값보다 작으면 삭제를 한다. 예를 들어, 83845가 있을 때, 8을 입력, 3을 입력, 8을 입력할 때는 3은 삭제된다. 1. Check 리스트 생성 2. 주어진수의 첫번째 수부터 확인 3. Check 리스트가 비어있다면 초기값 삽입 후 다음 수 확인 4. 현재 수가 Check리스트의 마지막 수보다 크다면 현재 수보다 작은 Check리스트 안의 수 모두 삭제 K -= 1 (가장 최근값(전의 값)이 현재 수보다 작다면 삭제 -> 만약.. Programmers - 조이스틱 with JAVA (+) 문제 처음에 "AAAA" 처럼 A로만 이루어진 문자열이 주어진다. 그리고 만들려고 하는 문자열이 주어진다 예를 들어, "JJJJAAAN"이라고 하자. 시작은 인덱스 0에서 시작하는데 이동 횟수와 A를 J나 N으로 바꾸는 변경 횟수의 합의 최소값을 구하는 문제이다. 아이디어 & 로직 우선, A를 다른 문자로 바꾸는 변경을 위한 횟수는 정해져있다. 다만, A에서 -1을 하면 Z이기에 해당 만들려는 글자가 Z와 가까운지 A와 가까운지 확인하면 된다. -> Math.min( 글자 - 'A' , 'Z' -글자 + 1) 이동 횟수는 항상 인덱스는 0에서 시작한다. 모든 인덱스에 대해서 경우의 수를 구하고 최소값을 구하면 된다. 예를 들어, 인덱스가 0 1 2 3 4 5 가 있다고 가정하고 3의 대한 경우의 수를 본.. Programmers - 가장 큰수 with JAVA (+) 문제 문제에는 Integer 리스트가 주어진다. 예를들어, 다음과 같이 주어진다고 가정하자. [3, 30, 34, 5, 9] 이를 조합해 가장 큰 수를 만드는 문제이다. 아이디어 & 로직 우선적으로 String으로 바꾼 후 정렬을 해주면 앞자리가 클 수록 앞으로 정렬된다. 또한 앞자리가 같다면 다음 수가 클 수록 앞에 정렬된다. 위의 예시를 String으로 바꾼 후 정렬하면 다음과 같은 결과를 얻을 수 있다. [9, 5, 34, 30, 3] 하지만 여기서 결과를 만들면 틀렸다. 왜냐하면 303보다 330이 크기 때문이다. 따라서 위와같이 그래도 정렬해서 반환하면 안된다. 조건에서 각 원소는 0부터 1000이하라고 하였다. 따라서 각 요소를 4배로 바꾸면 그 크기 비교가 더 명확해진다. 위의 예시를 4배 .. Programmers - 디스크 컨트롤러 with JAVA 문제 문제는 우선 디스크에 처리해야하될 작업들이 수행될 것이고 문제에는 작업들마다 작업이 디스크에 들어가는 시점과 소요시간이 묶여서 디스크에 들어간다. 이제 디스크를 처리할 때, (각 작업이 걸린 시간 + 작업이 디스크에 들어오고 기다린 시간) / 총 작업의 수 의 최소를 구하는 문제이다. 아이디어 & 로직 & 코드 우선적으로 아이디어는 다음과 같다. 1. 만약 작업 대기 줄에 하나밖에 없다면 먼저 실행된다. 2. 두개 이상의 작업이 있다면 수행시간이 짧은 것을 먼저 실행시킨다. 결국에 구하는 값을 보면 총작업의 수는 고정이고 각 작업이 걸리는 시간도 고정이다 작업이 디스크에 들어오고 기다리는 시간이 짧을 수록 최소값을 구할 수 있는 구조인데, 걸리는 시간이 짧은 작업을 먼저 수행해야 다른 작업이 기다리.. JPA - Join 이번에는 Spring JPA에서 테이블을 조인하는 방법과 이 후 데이터를 조회하는 방법에 대해서 정리해보고자한다. 현재, 만들고 있는 API를 예시로 들어 작성해보고자 한다. 먼저, 조인을 위해서는 두 테이블의 관계를 고려하는 것이 중요하다. 단방향 : 한쪽 테이블은 한쪽 테이블을 알지만 다른 쪽 테이블은 모르는 것. 양방향 : 서로 아는 구조 양방향의 문제점 ToString, hashcode, equals 등 사용시 무한 루프로 인한 StackOverFlow의 가능성 데이터 정합성 문제 : 업데이트시 양쪽 모두 업데이트 해야한다. -> 이러한 문제를 해결하기 위해 양방향 설정시 MappedBy를 통해 관계의 주인을 설정하고 일련의 규칙을 만들어준다. 객체의 두 관계 중 하나를 연관관계의 주인으로 지정합.. 이전 1 ··· 17 18 19 20 21 22 23 ··· 35 다음