반응형

movie

생활코딩님 유튜브영상

  • Mapping Rule : ER다이어그램을 통해서 표현한 내용을 관계형 데이터베이스에 맞는 형식으로 전환할 때 사용할 수 있는 방법론
  • Entity -> Table | Attribute -> Column | Relation -> PK, FK
반응형
반응형

movie

생활코딩님 유튜브영상

  • 개념적 모델링 완성

반응형
반응형

movie

생활코딩님 유튜브영상

  • Optionality
  • 저자는 댓글을 작성하지 않을수도 있다
  • 각 댓글은 반드시 저자가 있다
  • 댓글에게 저자는 필수다
반응형
반응형

11004번 K번째 수

스터디에서 진행한 퀵정렬문제

퀵정렬부턴 구현이 아직 어색해서 힘들었는데, 더 힘들었던건.. 좌측피벗정렬만 고집하다가 시간을 많이 사용했다.

좌측피벗 저격인지 원래 좌측보다 중간이 좋은지 모르겠는데 일단 풀리긴 했음...

 

--------

hint

중간피벗 퀵정렬을 사용하자...

--------

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
 
public class Main{ //중간 피벗 퀵정렬
    //11004 https://www.acmicpc.net/problem/11004
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
 
        int[] a = new int[n];
 
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++){
            a[i] = Integer.parseInt(st.nextToken());
        }
 
        //구현부
 
        qSort sort = new qSort();
        qSort.middleQuickSort(a, 0, a.length - 1);
 
        System.out.println(a[k-1]);
 
    }
 
}
 
class qSort{
 
    static void middleQuickSort(int[] a, int left, int right){
        if(left >= right){
            return ;
        }
 
        int pivotIndex = partition(a, left, right);
 
        middleQuickSort(a, left, pivotIndex - 1);
        middleQuickSort(a, pivotIndex, right);
    }
 
    static int partition(int[] a, int left, int right){
        int pivot = a[(left+right) / 2];
        while(left <= right){
            while(a[left] < pivot){
                left++;
            }
            while(a[right] > pivot){
                right--;
            }
            if(left <= right){
                swap(a, left, right);
                left++;
                right--;
            }
        }
        return left;
 
    }
 
    static void swap(int[] a, int b, int c){
        int temp = a[b];
        a[b] = a[c];
        a[c] = temp;
    }
}
cs

실행시간 - 1708ms

 

실패한 실행코드(좌측피벗 퀵정렬)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class Main{ // 이건 시간초과로 안됨 좌측피벗정렬임.
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //Scanner sc = new Scanner(System.in);
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
 
        int[] a = new int[n];
 
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++){
            a[i] = Integer.parseInt(st.nextToken());
        }
 
        //구현부
        quickSort sort = new quickSort();
        sort.sort(a, 0, a.length-1);
 
        System.out.println(a[k-1]);
//        for (int num:a) {
//            System.out.println(num);
//        }
    }
}
 
class quickSort{
 
    void sort(int[] a, int left, int right){
 
        if(left >= right){ // 스택오버플로우방지
            return ;
        }
 
        int pivot = partition(a, left, right);
 
        sort(a, left, pivot - 1);
        sort(a, pivot + 1, right);
 
    }
 
    int partition(int[] a, int left, int right){
        int pivot = a[left];
        int pivotIndex = left;
        while(left < right) {
 
            while (a[right] > pivot && left < right) {
                right--;
            }
            while (a[left] <= pivot && left < right) {
                left++;
            }
 
            swap(a, left, right);
 
        }
 
        swap(a, pivotIndex, left);
 
 
 
        return left;
    }
 
    void swap(int[] a, int i, int j){
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
cs

 

 

반응형
반응형

movie

생활코딩님 유튜브영상

  • Cardinality
  • 각 선생님은 한 반만 담임한다
  • 각 반의 담임은 한명이다
  • 1:1관계
  • 각 저자는 여러 글을 작성한다
  • 각 댓글은 하나의 저자만 존재한다
  • 1:N관계
  • 각 저자는 여러 글을 작성한다
  • 각 글을 여러 저자가 존재한다
  • N:M관계(다대다)

반응형
반응형

movie

생활코딩님 유튜브영상

  • 외래에 있는 테이블과 연결할 때 사용하는 열쇠 - 외래키
  • 기본키와 외래키가 연결되는걸 통해서 실제 구현
반응형
반응형

movie

얄코님의 유튜브 영상

  • 목록과 표가 함께 사용된 정보를 표기하는 방식중 가장 보편적으로 사용하는게 XML,JSON
  • JSON은 문법오류에 취약함
  • YAML은 사람이 보기 좋은 직관적인 코드(툴을 통해 JSON TO YAML가능)
반응형
반응형

movie

생활코딩님 유튜브영상

  • 식별자는 그 대상을 제외한 누구도 같은 값을 가지고있으면 안됨
  • 식별자 사용가능 Column = { user_id, national_id }
  • 인조키 - 행이 추가될때마다 중복되지 않는 값을 부여할수도있다
  • 식별자가 될 가능성이 있는 키들의 모음 = candidate key
  • 이 후보키 중에서 선택한거를 기본키(Primary Key)
  • 기본키가 아닌 다른키는 대체키라고 부름 또 성능향상을 위해 Secondery Index로 사용도 가능
  • 중복키 - 두가지를 합쳐서 식별이 가능할수도 있는데 이런걸 중복키라고 함 ex)직원번호 + 부서번호
  • ERD상에서 기본키를 식별하기 힘들 때 밑줄로 표시함

반응형
반응형

movie

생활코딩님 유튜브영상

  • 저자 - 이름, 자기소개, 가입일
  • 글 - 제목, 작성일, 본문
  • 댓글 - 작성일, 본문
  • 연관관계를 생각해보자 이런게 ERD
반응형
반응형

movie

생활코딩님 유튜브영상

  • UI와 Database는 원인과 결과의 관계에 있다.
반응형

+ Recent posts