[TIL] 5일차 알고리즘과 자료 구조

김지수·2024년 4월 25일

TIL

목록 보기
5/53
post-thumbnail

알고리즘과 자료구조

알고리즘

알고리즘(Algorithm)은 어떤 작업을 수행하기 위해 입력을 받아서 원하는 출력을 만들어내는 과정이다.

자료 구조

자료 구조(Data structure)는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.
어떤 자료 구조를 선택하느냐에 따라 효율적인 알고리즘 사용이 가능하다.


알고리즘이 왜 필요할까?

1. 문제해결

알고리즘은 복잡한 문제를 해결하기 위한 체계적이고 효율적인 접근 방법을 제공한다.
ex) 검색엔진, 빠른길 찾기 등등

2. 효율성

알고리즘은 자원(시간, 메모리, 에너지 등)을 효율적으로 사용하여 작업을 수행할 수 있도록 한다. 특히 대규모 데이터나 복잡한 문제를 다룰 때 효율성은 매우 중요하다.


자료 구조 중 Node를 이용해서 Stack을 구현해보았다.

public class Node<T> {
  
  protected T data;
  protected Node<T> next;

  public Node() {
    this.data = null;
    this.next = null;
  }
}

제네릭 타입T를 사용하는 Node 클래스를 정의했다. Node클래스는 연결리스트를 나타낸다.
data 는 노드가 가지고 있는 데이터를 저장하는 변수이다. 제네릭 타입T를 사용하므로 어떤 데이터 타입이든 저장 할 수 있다.
next 다음 노드를 가리키는 참조 변수이다. 연결리스트 특성상 다음 노드를 가리킨다.


public class StackNode<T> {

  private Node<T> top;

  private boolean isEmpty() {
    return this.top == null;
  }

  public void push(T data) {
    Node<T> newNode = new Node<>();
    newNode.data = data;
    newNode.next = this.top;
    this.top = newNode;
  }

  public T pop() {
    if (this.isEmpty()) {
      return null;
    }

    T data = this.top.data;
    this.top = this.top.next;

    return data;
  }

  public T peek() {
    if (isEmpty()) {
      return null;
    }

    return this.top.data;
  }

  public void print() {
    System.out.println("\n현재 스택의 내용을 top부터 출력합니다.");

    if (this.isEmpty()) {
      System.out.println("스택이 비어 있습니다.");
    } else {
      Node<T> currentNode;
      currentNode = this.top;

      while (currentNode != null) {
        System.out.print("[ " + currentNode.data + " ]  ");
        currentNode = currentNode.next;
      }
    }
    System.out.println("\n");
  }
}

제네릭 타입T를 사용하여 stackNode 클래스를 스택자료구조로 구현했다.
top 는 스택의 맨 위에 있는 노드를 가리키는 변수이다.
isEmpty() 메서드 는 스택이 비어 있는지를 확인하는 메서드이다. top 이 null인 경우 즉 비어 있을 때 true 를 나타낸다.

push() 메서드 는 새로운 노드를 생성하고 새로운 노드의 next를 현재의 top로 설정하고 top을 새로운 노드로 업데이트한다.


peek() 메서드 는 스택의 맨 위에 있는 데이터를 반환하고 데이터가 비어 있는 경우에는 null을 반환한다.
pop() 메서드 는 스택의 맨 위에 있는 데이터를 꺼내고 해당 데이터를 반환하고 top을 다음 노드로 업데이트한다. 스택이 비어 있는 경우에는 null을 반환한다.


오늘의 회고

긍정적인 점
알고리즘 공부하면서 조금씩 개념이 보이는 거 같다. 학습에 시간을 투자하여 기존에 알지 못했던 것들을 새롭게 습득한거 같다.

아쉬웠던 점
잠과 싸움에서 이기지 못해서 휴식을 조금 길게 가져간 거 같다. 휴식도 중요하지만 시간을 효율적으로 관리서 좀더 학습에 더 몰입할 수 있도록 해야겠다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글