알고리즘
알고리즘(Algorithm)은 어떤 작업을 수행하기 위해 입력을 받아서 원하는 출력을 만들어내는 과정이다.
자료 구조
자료 구조(Data structure)는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.
어떤 자료 구조를 선택하느냐에 따라 효율적인 알고리즘 사용이 가능하다.
1. 문제해결
알고리즘은 복잡한 문제를 해결하기 위한 체계적이고 효율적인 접근 방법을 제공한다.
ex) 검색엔진, 빠른길 찾기 등등2. 효율성
알고리즘은 자원(시간, 메모리, 에너지 등)을 효율적으로 사용하여 작업을 수행할 수 있도록 한다. 특히 대규모 데이터나 복잡한 문제를 다룰 때 효율성은 매우 중요하다.
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을 반환한다.
긍정적인 점
알고리즘 공부하면서 조금씩 개념이 보이는 거 같다. 학습에 시간을 투자하여 기존에 알지 못했던 것들을 새롭게 습득한거 같다.
아쉬웠던 점
잠과 싸움에서 이기지 못해서 휴식을 조금 길게 가져간 거 같다. 휴식도 중요하지만 시간을 효율적으로 관리서 좀더 학습에 더 몰입할 수 있도록 해야겠다.