본문 바로가기

🌳360

이분 탐색(Binary Search) 이분 탐색 BigO: O(log N) 결정 문제의 답이 이분적일 때(Yes or No) 사용할 수 있는 탐색 기법이다. 데이터가 오름차순 정렬된 배열에서 특정 값(N)을 찾아낸다. 정렬된 리스트에서 검색 범위를 줄여 나가면서 검색 값을 찾는다. 검색이 반복될 때마다 검색 범위가 반으로 줄어들기 때문에 속도가 빠르다. 예를 들어서 1~50의 숫자가 오름차순 정렬된 카드 더미에서 28번 카드를 찾는다고 가정하자. 첫 번째 카드부터 I번째 카드는 v[i], 28은 val로 정의할 때, 우리가 찾고자 하는 값은 i를 증가시키면서 v[i] >= val가 되는 지점(처음 결정 문제가 True가 되는 지점)의 i 값이다. 이분 탐색의 아이디어는 경계를 포함하는 구간 [start, end]을 잡은 뒤 구간의 길이를 절.. 2023. 1. 25.
분할 정복(Divide & Conquer) 분할 정복 크고 방대한 문제를 쉽게 풀 수 있는 문제 단위로 나누고, 그것들을 다시 합쳐서 문제를 해결하는 방법이다. 일반적으로 재귀 함수를 통해 구현하며, 메모리 제한이 없다면 비교적 빠르게 문제를 해결할 수 있다. 부분 문제가 다른 부분 문제에 영향을 미치지 않는다. (DP의 경우 영향을 미친다.) Divide: 기존 문제를 작은 문제로 나눈다. → 큰 문제를 어떻게 나눌 것이고, 이 과정의 최종 목표는 무엇인가? Base Case: 더 작은 부분의 문제로 나누지 않아도 바로 답을 구할 수 있는 경우 Recursive Case: 같은 형태의 부분 문제로 쪼개야 하는 경우 Conquer: 나누어진 문제가 여전히 분할이 가능하면 또 다시 Divide를 수행하고, 그렇지 않으면 문제를 해결한다. Combi.. 2023. 1. 25.
[JPA] 프록시와 연관 관계 관리 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 프록시 즉시 로딩과 지연 로딩 영속성 전이(CASCADE)와 고아 객체 프록시 데이터베이스에서 member를 조회할 때, member의 이름만 필요한 경우(A)가 있고, member가 속한 team의 정보가 필요한 경우(B)가 있다. A는 member의 정보만 가져오는 것이, B는 team의 정보까지 가져오는 것이 효율적일 것이다. Member member = em.find(Member.class, 1L); printMember(member); // A printMemberAndTeam(member); // B 🌕 em.find() vs em.getReference() em.find(): 데이터베이스를 .. 2023. 1. 24.
[JPA] 고급 매핑(상속 관계 매핑, @MappedSuperclass) 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 상속 관계 매핑 @MappedSuperclass 상속 관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 모델링 기법 중 슈퍼 타입 서브 타입 관계가 객체의 상속과 유사하다. 슈퍼 타입 서브 타입 논리 모델을 실제 물리 모델로 구현하는 방법에는 세 가지 방법이 있다. 🌕 조인 전략 각각 테이블로 변환한다. 장점은 테이블 정규화가 되어 있고, 외래 키 참조 무결성 제약 조건을 활용할 수 있다는 점과 저장 공간이 효율화 되어 있다는 것이다. 단점은 조회 시 조인을 많이 사용해서 성능이 저하되고, 조회 쿼리가 복잡하다는 것이다. (ALBUM의 데이터를 조회하려면 ITEM과 조인 해야 한다) 또한 데이터 저장 .. 2023. 1. 23.
[JPA] 다양한 연관 관계 매핑 이 글은 김영한 님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 수강하며 정리한 글입니다. 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 다대일 [N:1] 🌕 단방향 // Member.java @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; 🌕 양방향 // Team.java @OneToMany(mappedBy = "team") private List members = new ArrayList(); 일대다 [1:N] 더보기 🌕 단방향 // Team.java @OneToMany @JoinColumn(name = "TEAM_ID") private List members = new ArrayList(); 엔티티가 관리.. 2023. 1. 23.
[Python] lambda 보호되어 있는 글 입니다. 2023. 1. 16.