# 경우의 수 ## 경우의 수 - 어떤 사건에서 일어날 수 있는 가짓수 - ex) 주사위를 던지는 사건의 경우의 수 = 6 - 사건 A가 일어날 경우의 수 = n(A) ## 합의 법칙 - 사건 A 또는 B가 일어날 경우의 수 - 사건 A와 사건 B의 합의 법칙 n(A U B) = n(A) + n(B) - n(A 교집합 B) ## 곱의 법칙 - 사건 A와 사건 B가 동시에 일어날 경우의 수 - n(A x B) = n(A) x n(B) public class Main { public static void main(String[] args) { // 1. 합의 법칙 System.out.println("== 합의 법칙 =="); // 두 개의 주사를 던졌을 때 합이 3 또는 4의 배수일 경우의 수 int[] d..
분류 전체보기
# Comparable 혹은 Comparator에서 ex) x, y -> x - y //오름차순 x, y -> y - x //내림차순 # 자바 우선순위큐 사용 예시 - 1. 기본 오름차순 정렬 - 2. 기본 내림차순 정렬 (reverse) - 3. Comparable 구현 정렬 - 4. Comparator 구현 정렬 - 5. 문자열(사전식) 정렬 // Comparable || Comparator 사용... class Person implements Comparable { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public int compareTo(Perso..
안녕하세요 ~ 린내입니다! 저번 게시글에선 복합키를 사용한 엔티티의 연관관계 조회 이슈까지 알아보았습니다. 부모엔티티와 자식 엔티티를 각각 insert 하고나서, 그래프 탐색을 통해 조회를 하려고 시도했는데, select문이 나가지 않거나 심지어 select문이 나갔는데도 조회결과가 없는 상황이 발생하였습니다. 왜 그런 것일까요? 저는 이 사항을 해결하기 위해 하이버네이트 영속성 컨텍스트와 1차 캐시에 대해 좀 더 이해할 필요가 있었습니다. 영속성 컨텍스트 및 1차 캐시 1차 캐시 1차 캐시는 영속성 컨텍스트에 위치한 메모리 공간 엔티티 저장 방식 영속성 컨텍스트에 엔티티 인스턴스가 보관되기 위해선 반드시 식별자 값이 필요합니다.. 아이덴티티, 시퀀스 PK전략에 따라, insert가 플러시 되는 시점이 ..
# 힙(heap) - 완전이진트리 형태 -> 데이터의 연속성이 보장되서 배열(혹은 배열의 일종인 어레이 리스트)로 트리 작성하기 용이함 - 중복값 허용 - 반 정렬 상태 (형제 노드들 간의 정렬 X - 부모 노드와 자식 노드 같의 정렬만 O) - 최소값 혹은 최대값을 빠르게 찾아내기 유용한 자료구조 // ArrayList 로 최소 힙 구현 import java.util.ArrayList; class MinHeap { ArrayList heap; public MinHeap() { this.heap = new ArrayList(); this.heap.add(0); // 더미데이터삽입 -> 인덱스 기준으로 1번부터 사용하기 위함 !! } public void printTree() { for (int i = 1..
// 주어진 그래프를 두 개의 그래프로 분리할 수 있는지 확인 하는 프로그램을 작성하세요. // 분리 조건: 인접하지 않은 노드끼리 분리할 수 있다.. // 모든 노드는 연결되어 있다. // 분리 가능하면 true, 불가능하면 false 출력 // 예시 입력) // 그래프: {{1, 3}, {0, 2}, {1, 3}, {0, 2}} // 출력: true // 그래프: {{1, 2, 3}, {0, 2}, {0, 1, 3}, {0, 2}} // 출력: false public class Practice3 { public static void solution(int[][] graph) { // 인접노드에 대해서 -flag 값 처리 -> 인접노드인데, flag값이 동일하다면 분리가 되지 않는 것 // int[][..
// 인접 리스트 그래프의 DFS, BFS class GraphList2 extends GraphList { public GraphList2(int size) { super(size); } public void dfs(int idx) { // && DFS는 배열&스택(인접 정점들을 스택에 넣는다.) boolean[] visited = new boolean[this.vertices.length]; Stack stk = new Stack(); stk.push(idx); visited[idx] = true; while (!stk.isEmpty()) { // 노드 정보 & 간선 정보 분리되어있다는 것 주의 int i = stk.pop(); System.out.print(vertices[i] + " "); //n..
class GraphMatrix2 extends GraphMatrix { public GraphMatrix2(int size) { super(size); } public void dfs(int idx) { // DFS는 배열&스택(인접 정점들을 스택에 넣는다.) boolean[] visited = new boolean[this.vertices.length]; Stack stk = new Stack(); stk.push(idx); visited[idx] = true; while (!stk.isEmpty()) { int i = stk.pop(); System.out.print(vertices[i] + " -> "); for (int j = matrix[i].length - 1; j >= 0; j--) { /..
// 인접 리스트를 이용한 그래프 구현 class Node { int id; // 노드가 id 들고 있음 주의 -> 추후 dfs,bfs 시 방문배열체크용 ! Node next; public Node(int id, Node next) { this.id = id; this.next = next; } } class MyGraphList { char[] vertices; Node[] nodeList; int idx; public MyGraphList(int size) { this.vertices = new char[size]; nodeList = new Node[size]; idx = 0; } public void addVertex(char c) { if (idx == this.vertices.length) {..
class GraphMatrix { char[] vertices; // 노드 int[][] matrix; // 인접 행렬 int idx; public GraphMatrix(int size) { this.vertices = new char[size]; this.matrix = new int[size][size]; this.idx = 0; } public boolean isFull(){ return this.vertices.length == idx; } public void addVertex(char c) { if(isFull()){ System.out.println("Graph is full"); return; } this.vertices[this.idx++] = c; } public void addEdg..
안녕하세요 ~ 린내입니다. 오늘은 식별관계 복합키인 DB 구조에서 JPA 사용 시 유의 사항들에 대해 알아보겠습니다. 식별관계 복합키 DB 구조는 주로 레거시 환경에서 볼 수가 있는데요. https://techblog.woowahan.com/2595/ 위의 프로젝트와 흡사한 경우를 맞닥뜨렸을 때에 일어날 수 있는 상황과 유의사항에 대해 정리해보겠습니다. 일단 식별관계 복합키로 부모 자식 엔티티를 만들어 보겠습니다. 위의 우아한 형제들 기술 블로그에서 언급해주셨던 것처럼 저도 @IdClass를 사용하는 것이 가독성이 더 좋고 사용하기 편리하다고 생각하여 식별관계 복합키의 엔티티 표현은 @EmbededId가 아닌 @IdClass를 사용하겠습니다.부모 엔티티 클래스 및 부모 ID 클래스 - “직원 정보”@En..