이번 주 목표
📢 이번주 목표는 백준 실버1까지 승급하는 것이다. 현재 실버2이다.
오늘 스케줄
09:00~09:30 알고리즘 2주차 발제 세션09:30~12:00 데일리 과제 문제 풀이
12:00~13:00 점심 식사
13:00~14:00 데일리 과제 문제 풀이
14:00~16:00 병원 진료
16:00~17:00 데일리 과제 문제 풀이
17:00~17:40 팀 코드 선정 회의
17:40~18:20 휴식
18:20~18:40 기술 매니저님과 팀 코드 리뷰
18:40~20:30 저녁 식사 및 휴식
20:30~21:00 데일리 과제 문제 풀이 8번(뱀)
21:00~22:30 MVC2편 강의 수강(파일 업로드)
22:30~00:00 마이크로서비스 강의 수강(섹션 1 - Service Discovery)
00:00~00:20 TIL 작성
오늘 목표
👉 데일리 과제 모두 풀기
👉 TIL 빠지지 않고 작성하기
👉 북스터디 참여
👉 MVC2편_파일업로드 강의 수강
👉 마이크로서비스 강의 수강
오늘 한 것
데일리 과제 모두 풀기TIL 빠지지 않고 작성하기MVC2편_파일업로드 강의 수강마이크로서비스 강의 수강
오늘 못한 것
북스터디 참여
알게된 것
스택(Stack)

- 블록을 아래에서 위로 쌓아 올리는 구조를 가지고 있다.
- 가장 마지막에 삽입한 데이터를 가장 먼저 사용 LIFO(Last-in, First-out)
- 삽입(Push) : Push를 하게 되면 가장 위쪽에 데이터가 저장된다.
- 삭제(Pop): Push와 반대로 데이터를 삭제하는 것을 Pop, 가장 위쪽의 데이터가 삭제된다.
- 읽기(Peek): 마지막 위치(top)에 해당하는 데이터를 읽는다. 이 때, 삭제를 진행하지 않음
스택 구현
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 삽입 (push)
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("스택: " + stack)
// 조회 (peek)
int top = stack.peek();
System.out.println("스택의 맨 위 요소: " + top);
// 삭제 (pop)
int removed = stack.pop();
System.out.println("삭제된 요소: " + removed);
System.out.println("스택: " + stack);
}
}
시간 복잡도
자바의 Stack 클래스는 내부적으로 Vector를 사용하여 데이터를 저장합니다. 따라서 스택의 삽입(push), 삭제(pop), 조회(peek) 연산의 시간 복잡도는 모두 O(1)입니다.
이는 스택이 LIFO(Last In First Out) 원칙을 따르는 자료구조이기 때문에, 삽입과 삭제가 항상 스택의 맨 위에서 이루어지므로 상수 시간이 소요됩니다. 그리고 peek 연산은 단순히 스택의 맨 위 요소를 조회하는 것이므로 역시 상수 시간이 소요됩니다.
하지만 이러한 시간 복잡도는 스택의 크기에 따라 메모리를 동적으로 할당하거나 해제하는 데 필요한 시간은 고려하지 않습니다. 이러한 경우에는 시간 복잡도가 O(n)이 될 수 있습니다. 여기서 n은 스택의 크기입니다.
큐(Queue)

- 큐(Queue) 데이터를 한쪽 끝에서 삽입하고 반대쪽 끝에서 삭제하는 구조를 가지고 있다
- 가장 먼저 삽입한 데이터를 가장 먼저 사용 FIFO(First-in, First-out)
- 삽입(Enqueue) : Enqueue를 하게 되면 큐의 뒤쪽에 데이터가 저장된다.
- 삭제(Dequeue): Enqueue와 반대로 데이터를 삭제하는 것을 Dequeue, 가장 앞쪽의 데이터가 삭제된다.
- 읽기(Peek): 큐의 맨 앞에 위치한 데이터를 읽는다. 이 때, 삭제를 진행하지 않음
큐 구현
import java.util.Queue;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
// 삽입 (enqueue)
queue.add(1);
queue.add(2);
queue.add(3);
System.out.println("큐: " + queue);
// 조회 (peek)
int front = queue.peek();
System.out.println("큐의 맨 앞 요소: " + front);
// 삭제 (dequeue)
int removed = queue.poll();
System.out.println("삭제된 요소: " + removed);
System.out.println("큐: " + queue);
}
}
시간 복잡도
자바의 Queue 인터페이스를 구현하는 LinkedList 클래스는 내부적으로 연결 리스트를 사용하여 데이터를 저장합니다.
따라서 큐의 삽입(enqueue), 삭제(dequeue), 조회(peek) 연산의 시간 복잡도는 다음과 같습니다:
삽입(enqueue): O(1)
삭제(dequeue): O(1)
조회(peek): O(1), 중간의 요소를 탐색할 때(O(n))
이는 큐가 FIFO(First In First Out) 원칙을 따르는 자료구조이기 때문에, 삽입은 항상 리스트의 끝에서, 삭제와 조회는 항상 리스트의 시작에서 이루어지므로 상수 시간이 소요됩니다.
🤔오늘의 반성
- 팀 코드 선정 전까지 데일리 과제 모두 못 풀었다.
- 사람인/잡코리아 이력서 업데이트 못한 점
- 북 스터디 참여를 못함 책도 열심히 읽자...
👍 오늘의 칭찬
1. 지각하지 않았다.
2. 깃헙 1일 1커밋 달성
3. TIL을 빠지지 않고 작성했다.
4. 백준 실버2로 승급했다 v
❗ 항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
https://hanghae99.spartacodingclub.kr/reboot
'TIL' 카테고리의 다른 글
[항해99 취업 리부트 코스 학습일지] 17일차 (2) | 2024.04.06 |
---|---|
[항해99 취업 리부트 코스 학습일지] 16일차 (0) | 2024.04.05 |
[항해99 취업 리부트 코스 학습일지] 14일차 (1) | 2024.04.03 |
[항해99 취업 리부트 코스 학습일지] 13일차 (0) | 2024.04.01 |
[항해99 취업 리부트 코스 학습일지] 11일차 (0) | 2024.03.31 |