
💡 Iterator 자바의 컬렉션 프레임워크에서 컬렉션의 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 Iterator 이다. Iterator와 Iterable은 Collection의 상위 인터페이스이다. 상향된 for문을 쓰기위한 인터페이스 구현 Iterator의 구현 메서드 - boolean hasNext() -> 다음 요소가 있다면 true 반환 - E next() -> 포인터 - void remove() - void forEachRemaning(Consumer actions) Iterable의 구현 메서드 - Iterator iterator() - void forEach(Consumer actions) - Spliterator spliterator() Iterator 인터페이스 hasNe..

💡 LinkedList 포인터를 사용하여 여러 개의 노드를 연결하는 자료 구조 자료구조를 사용할때 항상 경계 조건을 생각하기 배열과의 차이점 배열도 순서대로 여러 데이터를 저장할때 사용한다는 공통점이 있지만 크기 조정이 어렵지만, LinkedList는 항상 맞는 크기로 만들어지도록 설계되어 많은양의 데이터나 순차적 데이터를 사용할때 적합함 LinkedList의 기본 구조 연결 리스트의 기본구조에는 노드가 있다 노드에는 두가지 정보가 들어있다 next - 다음 노드를 가리키는 포인터 data - 노드에 넣는 데이터를 가리키는 포인터 노드를 정의하는 법 public class LinkedList { private Node head; private int currentSize; /** currentSize 변..

💡 시간복잡도 서로 다른 알고리즘의 효율성을 비교할 때 사용 시간복잡도 효율순 : O(1) < O( 𝑙𝑜𝑔𝑛 ) < O(n) < O(n 𝑙𝑜𝑔𝑛 ) < O( 𝑛2 ) < O( 2𝑛 ) < O(n!) Big O 표기법이란? - O (빅 오 복잡도) : 비교 대상인 그래프가 일치 혹은 아래에 있을 때. 비교 대상인 다른 알고리즘과 같거나 더 빠르다. - θ (세타 복잡도) : 비교 대상인 그래프가 일치할 때. 비교 대상인 다른 알고리즘과 같다. - Ω (빅 오메가 복잡도) : 비교 대상인 그래프가 일치 혹은 위에 있을 때. 비교 대상인 다른 알고리즘과 같거나 느리다. - o (리틀 오 복잡도) : 비교 대상인 그래프가 아래에 있을 때. 비교 대상인 다른 알고리즘보다 더 빠르다. - ω (리틀 오메가 복잡도)..

💡 자료 구조 여러 데이터들의 묶음을 저장하고 사용하는 방법을 정의한 것 자료의 집합, 각 원소들 사이의 관계가 논리적 정의된 일정한 규칙에 의하여 나열되며, 자료처리의 효율성을 위해 조직&체계적으로 구분하여 표현한 것 (알고리즘 테스트 시 자주 등장하는 Stack,Queue,Tree,Graph 등) 자료구조의 경계 조건 자료 구조가 비어있는 경우 자료 구조에 단 하나의 요소가 들어있을 때 자료 구조의 첫 번째 요소를 제거하거나 추가할 때 자료 구조의 마지막 요소를 제거하거나 추가할 때 자료 구조의 중간 부분을 처리할 때 학습 포인트 각 자료구조가 가진 특징 각 자료구조를 사용하기 적합한 상황 판단 다른 구조와의 차이점을 이해하기 위해 자료구조 내부 직접구현 구현 시, 동작원리 이해하기 자료구조를 배워야..

⭐ 시간 복잡도 (Time Complexity) 보다 효율적인 방법 탐색 = 시간복잡도 탐색 문제를 해결하기 위한 알고리즘의 로직을 코드로 구현 시, 시간복잡도를 고려한다는건 무슨 의미일까? 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼만큼 걸리는가? 효율적인 알고리즘을 구현한다는 것 = 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘 구성 📌 시간 표기법 Big-O(빅-오) Big-Ω(빅-오메가) Big-θ(빅-세타) 위 3가지 표기법은 시간복잡도를 각각 최악,최선,중간(평균)의 경우에 대해 나타내는 방법임 📌 시간복잡도가 O(1) 인 경우 O(1)은 constant complexity라고 하며, 입력값이 증가하더라도 시간이 늘어나지 않음. 입력값의 크기와 관계없이..

⭐ 깊이 우선 탐색 (DFS, Depth-First Search) 최대한 깊게 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동 ↓ → 루트 노드에서 시작 - 다음 분기(Branch)로 넘어가기 전, 해당 분기를 완벽하게 탐색 모든 노드를 거치고자 할 때 사용하며, BFS보다 간단하며, 검색속드는 느림 Stack / 재귀함수로 구현 ⭐ 너비 우선 탐색 (BFS, Breadth-First Search) 최대한 넓게 이동한 다음, 더이상 갈 수 없을때 아래로 이동 → ↓ 루트 노드에서 시작 - 인접한 노드를 먼저 탐색하며, 멀리 떨어진 정점을 제일 나중에 방문하는 순회방법 주로 두 노드사이의 최단 경로를 찾고 싶을때 사용 Queue로 구현 📌 DFS / BFS의 시간복잡도 - 두 방식 모두 조건내의 ..

⭐ Tree 그래프의 여러 구조 중 단방향 그래프의 한 구조 (비선형 구조) 데이터 타입을 Custom으로 정의하고, new 키워드를 통해 새로운 객체(인스턴스) 생성 가능하며 Method 사용 가능 📌 Tree 구조의 요소 Depth = root ~ leef node 까지의 depth 표현가능 / root(A) = 0 B,I = 1 C,F,J,M = 2 Level = root(A) = 1 B,I = 2 ... Height = leef node를 기준으로 root 까지 0 ~ 올라감 Sub Tree = Sub node 를 가지고 있으면 그 영역은 1개의 Sub Tree라고 봄 📌 Tree Method addChildNode(value): 입력받은 value를 Tree에 계층적으로 추가할 수 있어야 함 r..