아쿠의 개발 일지

한화 시스템 부트 캠프 7주차 회고 본문

ETC/한화시스템

한화 시스템 부트 캠프 7주차 회고

디아쿠 2024. 6. 19. 21:04

늦게 올려서 죄송합니다 앞으로 열심히 살아볼게요

 

7주차 때는 자료구조에 대해서 배웠다.

자료구조의 정의는 데이터 값의 모임, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 실행할 수 있도록 자료를 구분하여 표현한 것이다.

 

스택, 트리, 리스트에 대해서 배웠고 이를 활용하여 연결 리스트도 구현했고, 스택도 구현했다.

스택은 정보처리기사를 공부하면서 알게 됐었는데, 이 개념을 직접 구현한다니까 많이,,, 어려웠다.

 

스택에서는 데이터를 저장할 수 있는 push 기능과, 비워내는 pop 기능이 대표적으로 있었다.

public class Stack {

    Integer[] datas;
    Integer top;

    public Stack(Integer size) {
        this.datas = new Integer[size];
        this.top = -1;
    }

    // push 기능

    void push(Integer data) {
        if(top == 9) {
            System.out.println("가득참");
            return;
        }
        top = top + 1;
        datas[top] = data;
    }
    
        // pop 기능
        Integer pop() {
        if(top != -1) {
            Integer tmp;
            tmp = datas[top];
            datas[top] = null;
            top = top - 1;
            return tmp;
        } else {
            System.out.println("비었음");
            return null;
        }
    }

 

숫자 배열을 저장할 수 있는 datas 변수를 만들어주고, 어디까지 저장했는지를 기억할 top 변수를 만들었다.

생성자를 만들어서 숫자 10개 저장할 수 있는 배열을 생성하여 변수에 저장했다.

어디까지 저장했는지를 기억할 변수에 -1을 저장하여 top이 -1이 되면 스택이 비어있는 거라고 생각할 수 있게 했다.

 

push 기능은 스택이 비어있지 않으면 top 인덱스 번호의 배열에 값을 꺼낸다음 , 비워주고 top에 -1 을 감소시켜 주는 것이다. 스택이 만약 비어있다면 null 값을 반환하게 해줬다. 

 

이런식으로 리스트와 트리도 구현했고, 정말 많이 어려웠다.

이를 열심히 숙지해서 발표에 보탬이 되어야 했기에,,, 열심히 했다.

 

발표 주제는 우리 팀장이 가위바위보를 다 지는 바람에 아무도 안 한 <레드블랙트리> 를 구현하게 됐다.

이론을 설명하고, 구현한 코드를 설명하는 방식으로 진행 됐다.

아무래도 레드블랙트리가 뭔지에 대해서 숙지하는데 오래 걸려서 그런가... 10시까지 남았고, 집에 가서 새벽 3시까지 구현하고 ppt를 만들다가 잤다...!! ㅠ ㅠ !! 

 

팀 ppt이다. 표지를 정말 예쁘게 만들었고 내용은 시간상,,, 후다다다닥

 

레드블랙트리에 대해서 설명을 하자면 AVL와 개념이 동일한 게 많았다.

다만 거기서 더 심화된 내용인 <레드, 블랙>인 색을 가지는 노드들이 있었기에,,, 좀 더 힘들었다.

 

레드블랙트리는 5가지의 규칙을 지켜가며 구현을 해야 했는데,

1. 노드는 빨간색 또는 검은색이다.

2. 루트 노드는 항상 검은색이다.

3. 모든 리프 노드는 검은색이다.

4. 빨간색 노드의 자식은 모두 검은색이다, 빨간색 노드는 연속해서 등장할 수 없다.

5. 모든 노드의 도달하는 경로의 검은색 노드 개수는 항상 동일하다.

 

의 규칙을 가지고 있다. 1,2,3은 그렇게 문제가 안 되는데 삽입을 할 때 마다 4번과 5번에 문제가 생겼고 이를 해결하기 위해  Restructuring과 Recoloring을 수행한다.

 

Restructuring은 부모 노드와 자식 노드의 색을 바꾸고, 회전을 하는 것으로 생각하면 되고

Recoloring은 조상과 자신의 색을 같게 해주고, 부모 노드를 다르게 해주면 된다.

 

열심히 공부했다.

 

 

결국 나는 발표를 하게 됐고, 저번 주의 걱정이 현실이 됐다.

늦게 올리는 시점인 지금, 알고리즘 발표가 이미 끝이났다.

자료구조 발표를 바탕으로 더 성장하여 ,,, 왔?으며... 알고리즘에 대한 회고록은 기대?를 하셔도 될 것 같다.

레드블랙트리는 나도 혼자서 해 보고 블로그에 풀이과정을 올릴 예정이다.

 


 

Keep 

 

일단 하고자 하는 마음이 가장 중요한 것 같다.

지금은 너무 어렵고 힘들고, 복습이 없으면 버틸 수 없을 것 같지만 이렇게 하다보면 분명 ! 혼자서 척척 할 날이 올 거라고 믿는다. 지금처럼 이렇게 놓지 않고 꾸준히 공부 하는 것. 이어나가야 한다!

chat gpt한테 예전엔 코드를 어떻게 해야하는지 방식을 물어봤다면 지금은 내가 짠 코드를 보여주고 어디가 틀렸고 어떻게 개선해야 하는지를 묻는다. 그게 그거 아니냐 하는 사람도 있을 수 있지만 다르다. 다를 것이다.

 

Problem

 

주말에 복습을 너무 열심히 하다보니,,, 블로그에 좀 소홀해지는 것 같다.

chat gpt한테 그만 좀 물어보자.

 

Try

 

블로그는 열심히 다시 적으면 될 거고,,, gpt는 점점 개선하고 있다.

아, 주말엔 하루는 복습하고 하루는 강의를 듣고 나눠야 할 것 같다. 기초가 많이 부족하다보니 매번 강의만 듣고 있다 ㅎ.

 

지각은 한 번도 안 했다.
728x90