본문 바로가기
What I Learned

[WIL] Day 1

by 케찹이 2023. 5. 4.
반응형

 

Spring 학습 단계:

김영한님 쉅들을 예정.

김영한님 쉅 듣기 전에 Java선수 필수. 스프링 완정정복 코스 스프링 입문부터 ~ 스프링 DB 2편까지 쭉 학습. 이후에 실습 코스 야생형으로 학습. 이후에 다시 스프링부스트와 스프링 고급형 듣기. 

스프링 DB듣기 전에 기본 DB수업 선수 필요.

 

Java 복습:

<Java>

자바 파일은 컴파일을 하면 자바 class 파일이 생성이 된다. Class 파일을 생성하는 방법은 “javac 파일이름.java”이다. 

그러면 해당 class파일이 생성이 되고 class파일을 실행시키기 위해서 “java 클래스파일이름”을 타입하면 해당 클래스파일을 실행시킨다. 

 

자바는 클래스가 필요하고 클래스의 이름의 첫번째 알파벳은 대문자이다. 클래스안에는 필드 또는 메소드가 들어가 있다. 필드는 메소드 밖에서 선언된 변수라고 생각하자.

메소드는 다른 언어에서 함수라고 얘기를 하는데 자바 개발자들은 메소드를 함수라고 얘기하는 걸 굉장히 싫어한다.

 

흔히 int, byte, short, long, float, double이런 변수타입은 기본형 타입 이외의 변수는 레퍼런스 타입 이라고 한다.

 

label이란것이 있음. 여러 중첩 반복문이 있을 때 break와 continue가 한계가 있음. 그래서 한번에 중첩되어있는 반복문을 빠져나가기 위해서 사용된다. 

Ex) outter:

for(int i = 0; i < 10; i++){

    for(int j = 0; j < 100; j++){

        System.out.println(j);

        if(j==3)

            break outter;

    }

}

Continue case도 저 break 자리에 대신 쓰면 사용 가능하다.

 

참조변수, 클래스, 인스턴스/오브젝트 구분. 

Book b = new Book()

이라는 위의 코드가 있을 때 new Book()하면 힙에 인스턴스가 생성이 되고, b는 이를 참조하는 참조 변수가 된다. 참조 변수가 없으면 힙에 생성된 인스턴스를 사용할 수가 없고 garbage값이 되어 버린다. Book은 참조타입, Book()은 생성자이다.

 

<C++ 알고리즘>

(싸피 대비용으로 알고리즘 준비 시작했는데 자격이 안될 가능성이 높아서 조금 천천히 하게 됨…)

Quick sort, 이론은 잘알겠는데 코딩 너무 버벅여, 이론 할때랑 실습할때랑 코딩하는게 다르네…

partition함수 마지막에서 j값이 항상 i값보다 작아지기 때문에 그대로 pivot위치와 j위치의 값이랑 swap해주면 pivot이 위치를 제대로 배치가 된다. 이렇게 안하면 i==j가 될때 pivot값과 i or j의 값과 크기 비교를 해야 됨, 이렇게 하면 코드가 조금 더 복잡해지기 때문에 앞에서 말한 방식으로 하는게 더 맞는듯. (한번 더 코드보면서 복습 필요)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int partition(vector<int> &A, int S, int E){
    // 만약에 비교할 숫자가 두개 밖에 없을때
    if(S+1 == E){
        if(A[S] > A[E]){
            swap(A[S], A[E]);
        }
        return S;
    }
    
    // 일단 피벗값과 첫번째 값과 바꾸기
    int pivot = (E - S) / 2;
    swap(A[S], A[pivot]);
    
    int i = S+1, j = E;
    while(i<=j){
        while(A[S] > A[i] && i < E) i++;
        while(A[S] < A[j] && j > S) j--;
        if(i<j){
            swap(A[i], A[j]);
        }
    }
    swap(A[S], A[j]);
    return j;
}

void QuickSort(vector<int> &A, int S, int E, int K){
    int pivot = partition(A, S, E);
    if(pivot == K){
        cout << A[pivot] << "\n";
        return;
    }
    else if(pivot > K){
        QuickSort(A, S, pivot-1, K);
    }
    else{
        QuickSort(A, pivot+1, E, K);
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N, K;
    cin >> N >> K;
    
    vector<int> A(N, 0);
    for(int i = 0; i < N; i++){
        cin >> A[i];
    }
    
    QuickSort(A, 0, N-1, K-1);
    
    return 0;
}

 

Merge sort, 병합 정렬의 합쳐지는 개념이 알고리즘 문제에 많이 활용이 된다. 해당 정렬에서는 투포인터 방식으로 정렬을 합쳐준다.

Radix Sort, 기수 정렬, 특이한 정렬방법, 주어진 배열의 숫자의 값이 작고 값이 모두 양수 일때 사용 가능하다. 각 0~9의 큐를 각각 가지고 첫번째 자리부터 끝자리까지 하나씩 그 자리수에 맞는 큐에 넣고 계속 반복하다보면 정렬이 되는 그런 정렬 방식이다. 

 

<블록체인>

Ledger: 암호화폐의 시각화와 관리를 담당하며 지갑에 안전하게 보관하고 있는 자금을 통해 다양한 외부 플랫폼과 상호작용할 있는 온라인 인터페이스이다.

노마드코더 암호화페101영상 개꿀잼... 이거보고 로드맵보자.

오늘 페페코인이 떡상했다...

반응형

'What I Learned' 카테고리의 다른 글

[WIL] Day 6  (0) 2023.05.13
[WIL] Day 5  (0) 2023.05.12
[WIL] Day 4  (0) 2023.05.10
[WIL] Day 3  (0) 2023.05.08
[WIL] Day 2  (0) 2023.05.08

댓글