Techvu

    인덱스와 힌트

    Index 와 Hint 데이터베이스 I/O 디스크가 느린 이유 데이터를 읽기 위해서는 헤드를 움직여 데이터가 저장된 위치(트랙)를 찾아야 한다. 이때 소요되는 시간을 탐색 시간(seek time)이라고 한다. 그 후 원하는 정보가 있는 섹터가 다가올 때까지 기다리는데 이때의 시간을 회전 대기 시간(rotational latency time)이라고 한다. 헤드 : 상단 이미지에서 디스크 오른쪽에 있는 회색 꺾쇠의 디스크와 닿는 부분 트랙 : 디스크(플래터)의 한 면에서 중심으로부터 같은 거리에 있는 섹터들의 집합 섹터 : 데이터 저장/판독의 물리적 단위 데이터베이스의 I/O 처리 작업은 이렇게 물리적인 작업을 거치기 때문에 시간이 많이 소모된다. 순차 I/O vs 랜덤 I/O 순차 I/O 물리적으로 인접한..

    [BOJ 15686] 치킨 배달

    치킨 배달 BOJ 15686 : 치킨 배달 해설 ✔ N X N 크기의 도시 존재 ✔ 도시는 1 X 1 크기 ✔ 도시의 각 칸은 좌표 형태(r,c) 이며 '빈칸' OR '치킨집' ✔ r 과 c 는 1부터 시작 ✔ 치킨 거리 : 집과 가장 가까운 치킨집 사이의 거리 ✔ 도시의 치킨 거리는 모든 집의 치킨 거리의 합 ✔ (r1, c1) 과 (r2, c2) 사이의 거리는 Math.abs((r1 - r2) + (c1 - c2)) ✔ 0은 빈칸, 1은 집, 2는 치킨집 # 입력 예시 1번 (1, 1, #0) (1, 2, #0) (1, 3, #HOUSE) (1, 4, #0) (1, 5, #0) (2, 1, #0) (2, 2, #0) (2, 3, #CHICKEN) (2, 4, #0) (2, 5, #HOUSE) (3, ..

    조합(Combination)

    조합(Combination) 이번 시간에는 DFS 로 조합을 구현하는 방법을 배워보자. N 명 중 R 명을 뽑는 경우의 수 nCr 은 n 개의 원소를 갖는 집합에서 r 개의 부분 집합을 고르는 경우의 수를 의미하므로 부분 집합과도 관련이 있다. 구현 // 조합(Combination) : nCr = n-1Cr-1 + n-1Cr // n 명 중에서 r 명을 뽑는 경우 // 5C3 = 4C2 + 4C3 public class Main { static int[][] store = new int[35][35]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(combinationByDfsW..

    부분 집합 구하기(DFS)

    부분 집합 구하기(DFS) 이번 시간에는 DFS 를 이용한 부분 집합을 구하는 방법에 대해서 배워보자. 문제 자연수 N 이 주어지면 1 ~ N 까지의 원소를 갖는 집합의 부분집합을 모두 출력하는 프로그램을 작성하세요. 단, 공집합은 출력 하지 않습니다. 입력 3 출력 1 2 3 1 2 1 3 1 2 3 2 3$$원소의 개수가 N 인 부분집합의 개수 : 2^n$$ $$공집합을 제외한 부분집합의 개수 : 2^n-1$$ 루트 노드부터 보면, 1을 포함하는 경우 하지 않는 경우로 나누고, 2 depth 에서는 원소 2를 포함하는 경우 하지 않는 경우로 나눌 수 있다. 따라서, N 만큼의 반복을 돌고 depth 가 N + 1 이 되는 경우 종료된다. 구현 public class Main { private stat..

    깊이 우선 탐색(DFS)

    깊이 우선 탐색(DFS) DFS(Depth-First Search) 는 깊이 우선 탐색이라고 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. DFS 는 Stack 자료구조를 사용하며 Stack 을 이용하기 때문에 재귀 함수를 이용하면 쉽게 DFS 구현을 할 수 있다. 재귀와 Stack 에 대해서 잘 모르겠으면 해당 링크를 통해서 배우고 오자. 동작 과정 Step1 Step1. 시작 노드를 스택에 넣고 방문 처리한다. Step2 Step2. 방문하지 않은 인접 노드 중에서 번호가 가장 낮은 곳을 방문하고 해당 노드를 스택에 넣어 방문 처리 한다. Step3 Step3. 위 과정을 반복한다. 구현 public class Main { public static boolean[] visited ..

    다양한 연관관계 매핑과 설정에 따른 트레이드 오프

    연관관계 방향 설정에 따른 트레이드 오프 연관관계 매핑 다양한 연관관계 매핑이 존재하며, 실무에서 어떤 연관관계 매핑을 사용할 것인지에 따라서 객체의 설계가 달라진다. 다대일(N:1) 다대일(N:1) 연관관계 매핑은, @ManyToOne 을 사용하는 곳을 연관관계 주인으로 설정하는 것을 말한다. 실무에서 가장 자주 사용되고 추천하는 방식이라고 한다. 이 방식의 장점은 객체의 형태를 최대한 관계형 데이터베이스와 유사하게 가져가기 때문에 유지보수성이 좋다는 점이다. 단점은, Member 에서 Team 으로 참조할 일이 없더라도 다대일 연관관계 매핑을 사용하기 위해서, 참조 변수를 두는 점이다. 객체지향적으로 조금 손해 보더라도, 객체를 관계형 데이터베이스와 유사하게 가져갔을 때의 장점이 더 크기 때문에 실무..

    [BOJ 16234] 인구 이동

    인구 이동 BOJ 16234 : 인구 이동 해설 이 문제는 2차원 배열의 탐색 문제이기 때문에 좌표 형태를 그래프로 바꿔야 한다는 생각을 먼저 하였다. 문제의 입력 예시 4번을 가지고 해설할 것이다. 입력 N : 3, L : 5, R : 10 3 5 10 10 15 20 20 30 25 40 22 10 L 인구 이동이 불가능 할 때 까지 반복 구현 class Country { private int x; private int y; public Country(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } } public class Main { private stati..

    테이블과 컬럼에 대한 명세를 엔티티에 자세하게 적는것이 좋은지?

    테이블과 컬럼에 대한 명세를 엔티티에 자세하게 적는것이 좋은지? 테이블과 컬럼에 대한 명세를 엔티티에 자세하게 적는것이 좋은지, 아니면 @Column 같은 애노테이션은 생략해도(생략 가능할 경우) 좋은지에 대한 개인적인 의견이 들어간 글입니다. 테이블과 컬럼에 대한 명세를 엔티티에 자세하게 적는것이 좋다고 생각 그 이유는 엔티티에 테이블 및 컬럼에 대한 명세를 자세하게 적으면, 데이터베이스의 테이블 명세를 직접 까보지 않아도(Ex. DBeaver 에 들어가서 테이블을 열어서 명세 확인) 엔티티단에서 바로 확인할 수 있다는 장점이 있기 때문입니다. 자세하게 적는다 : 엔티티를 보고 테이블 명세를 정확하게 파악할 수 있어야 하는 정도 MyBatis 를 사용해보신 분들은 알겠지만, SI 에서 VO, DTO 와..