본문 바로가기

자바25

자바 - Queue의 LinkedList 이야기와 이걸로 코테 푸는 법 LinkedList는 List걸로도 쓸 수 있고 Queue걸로도 쓸 수 있고 Deque걸로도 쓸 수 있다.e.g. Deque numbers = new LinkedList(); 상황에 따라 선택하면 된다. 여기서는 큐를 구현한 링크드리스트를 알아 보자! Java에서 LinkedList 클래스는 List와 Deque 인터페이스를 구현하는데, 이를 통해 이중 연결 리스트(double-linked list) 구조를 제공합니다. LinkedList를 사용하는 주된 이유 중 하나는 그것이 큐(queue), 더블 엔디드 큐(deque), 그리고 리스트(list) 기능을 모두 제공하기 때문입니다. 다음은 LinkedList가 큐로 사용될 때의 특징과 관련 기능에 대한 자세한 설명입니다. 그림을 보면 이해가 더 빠르다... 2024. 4. 27.
[묘공단] 자바 - Queue 이야기 태초에 Iterable이 계셨고 그 아래에 자식 Collection이 계셨고 그걸 또 Queue가 계승하셨네.앞으로 Deque도 볼 건데 일단 머릿속에 큐(한 번 영어로 쓴 건 그 뒤로는 다 한글로 쓸 것임.)를 중심에 둬 보자.왜냐면 덱 인터페이스가 큐 인터페이스를 상속하기 때문이다.위 그림 상으로는 큐에 대해서 좀 보고 PriorityQueue만 보면 될 거 같지만LinkedList도 봐야 한다.왜? 링크드리스트는 List, 큐, 덱을 모두 구현하기 때문이다.나 같은 범부는 여기까지만 봐도 너무 신기하고 재밌고 이 언어 설계한 사람들이 진짜 천재 같아서 가슴이 두근두근하다.요즘 세상에 누가 자바 쓰냐고 하지만 나는 이 자바만 해도 너무 재밌을 거 같다! 큐(Queue)는 자바에서 컬렉션 프레임워크의 .. 2024. 4. 27.
자바 - Stack 및 Vector로 코테 푸는 법 자~ 코딩 테스트에서 Stack 쓸 경우를 좀 파악해 봅시다.1. 코테에서 스택을 사용해야 하는 때스택은 후입선출(Last In First Out, LIFO) 구조로, 가장 마지막에 들어온 요소가 가장 먼저 나가는 특성을 가집니다. 이 특성은 특정 유형의 알고리즘 문제에서 매우 유용하며, 스택을 사용해야 하는 몇 가지 상황은 다음과 같습니다:괄호 검사: 코드에서 괄호의 짝이 맞는지 확인하는 문제 역순 문자열: 문자열을 역순으로 뒤집거나 순서를 조작해야 하는 경우 후위 표기법 계산: 수식이 주어진 경우, 이를 계산하기 위해 스택 사용재귀 알고리즘의 반복적 구현: 재귀 함수를 스택을 사용하여 반복적으로 풀기깊이 우선 탐색(DFS): 그래프의 깊이 우선 탐색을 구현할 때2. 코테에서 스택을 사용해야 하는 문제.. 2024. 4. 27.
자바 - Stack 및 Vector 이야기 스택! ADT로서의 스택 이야기는 지겹다!벡터 이야기부터 좀 해 보자. 자바의 스택 클래스는 벡터를 상속한다.그래서 스택은 벡터의 모든 기능을 포함한다.벡터가 뭘까?(참고로 난 Vector를 1도 모른다. 그래서 이 글이 매우 길어질 것 같다.) 우선 이게 도대체 어떤 인터페이스를 구현하고 있는 클래스인지 알아 봤다.(geeksforgeeks... 옛날(?)에는 이상한(?) 글만 올라와 있는 광고 사이트라 생각했는데 지금은 가장 마음에 드는 퀄리티의 콘텐츠를 제공한다.)벡터가 리스트를 구현한다고???리스트는 또 콜렉션을, 콜렉션은 또 이터러블을 상속하네...그럼 어떻게 한다? 싹 다 뒤져 본다...Iterable 인터페이스Iterable 인터페이스는 Java의 모든 콜렉션 루트 인터페이스 중 하나로, 콜.. 2024. 4. 26.
자바 - Map으로 코테 푸는 법 자바 코딩 테스트에서 어떻게 하면 Map으로 문제를 풀 수 있을까?혹여나 지금 Map으로 아무 것도 못 하겠다 하더라도 괜찮다.1번, 2번, 3번 계속 보고 하다 보면 할 수 있게 된다. HashMap을 쓰는 법!문제: 두 수의 합문제 설명: 주어진 정수 배열 nums에서 두 수를 선택하여 그 합이 특정 목표값 target이 되도록 합니다. 두 수의 인덱스를 반환해야 합니다. 각 입력에 정확히 하나의 솔루션이 있다고 가정하고, 같은 요소를 두 번 사용할 수 없습니다. 입력 예시: nums = [2, 7, 11, 15], target = 9 출력 예시: [0, 1]가장 좋은 솔루션이 문제는 HashMap을 사용하여 각 숫자의 보완적인 숫자(목표값 - 현재 숫자)가 이전에 맵에 있는지 확인함으로써 효율적으로.. 2024. 4. 26.
자바 - Map 이야기 몇 분 전에 내 역작 '자바 - List - LinkedList 뽀개기'를 날려 먹어 기분이 심히 좋지 않으나그래도 할 일은 해야 하기에 Map으로 바로 넘어간다. 1. 맵은 '키:값' 형태의 자료구조다.각 키는 고유해야 한다.각 키에는 하나의 값이 매핑되어야 한다.우선은 이것만 기억하자.2. 맵은 인터페이스다. 따라서 자바 안에는 이 인터페이스를 구현한 많은 클래스들이 있다.각 클래스를 알고 각 클래스 안의 메서드를 다 알아야 코테를 잘 풀 거 아닌가?Java의 주요 Map 구현체HashMap순서를 보장하지 않는 맵으로, 키와 값을 해시 테이블을 사용하여 저장합니다. 키의 순서에 의존하지 않는 애플리케이션에 적합하며, 일반적으로 가장 많이 사용됩니다.null 키와 null 값이 허용됩니다.TreeMap.. 2024. 4. 26.
자바 - List - LinkedList 뽀개기 뜻하지 않게 맥미니 전선을 건드려 본체가 off됐고 3시간 동안 쓴 글이 날아갔다. 나는 그 글을 다시 복원할 자신도 힘도 없다. 일부러 이 글은 여기서 끝낸다. 이 글 조차 안 남길 수 있지만 내가 LinkedList 공부를 했다는 흔적을 남기기 위해 남긴다. 2024. 4. 26.
[묘공단] 스택 이야기 지금까지 묘공단 관련 포스팅을 velog에서 했었는데 이제 티스토리로 옮기고 싶어서 여기에 적는다. 자료구조하면 보통은 스택부터 이야기를 들을 것이다.매우 쉽고 기본이 되니까.스택은 ADT(Abstract Data Type)다.구현된 부분이 없는 일종의 인터페이스 같은 것이다.ADT의 구현은 자바에서 자바 콜렉션 프레임워크에 되어 있다. 근데 스택은 콜렉션에 없다.스택 클래스가 따로 있다.그리고 덱 ADT가 구현된 ArrayDeque을 스택처럼 쓸 수 있다(이건 큐처럼도 쓴다. 양방이 다 뚫려 있어서.). 이게 앞으로 나올 내용을 이해하기 위해 최소한으로 알고 있으면 될 내용이었다.1. 자바에서 스택을 쓸 경우는 뭐가 있을까? 후입선출(LIFO) 구조가 필요한 경우:웹 .. 2024. 4. 22.
자바 - List - ArrayList 뽀개기 - 2 그럼 코테에서 ArrayList는 어떻게 쓸 수 있을까? 1. 초기화 및 선언 ArrayList를 선언하고 초기화하는 기본적인 방법들입니다: import java.util.ArrayList; // 기본적인 선언 ArrayList list = new ArrayList(); // 초기 용량 지정 ArrayList listWithCapacity = new ArrayList(100); // 다른 컬렉션으로부터 초기화 ArrayList listFromOther = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); 주의: Arrays.asList(1, 2, 3, 4, 5) 2024. 4. 14.
자바 - List - ArrayList 뽀개기 - 1 ArrayList는 Java Collections Framework의 일부로, List 인터페이스를 구현하는 동적 배열이다.ArrayList는 요소를 배열로 관리하며, 배열이 꽉 찼을 때 자동으로 크기를 늘린다.이는 Java에서 가장 많이 사용되는 컬렉션 중 하나로, 데이터를 인덱스 기반으로 접근할 수 있어 임의 접근(random access)이 빠르다.요약: 길이가 변하는 동적 '배열'. 배열이 다 차면 자동으로 커진다. index 사용이 가능하다. ArrayList의 핵심 특징동적 배열 구현: 위에 언급함.데이터 접근: 인덱스 덕에 검색에서는 O(1)이다. 배열의 끝에 데이터를 추가하거나 삭제해도 평균적으로 O(1)이다. 중간에 데이터를 추가 또는 삭제하면 O(n)이다. 여기서 n은 해.. 2024. 4. 14.
자바에서 사용할 수 있는 자료구조의 종류 자바에서 사용할 수 있는 자료구조는 크게 자바 표준 라이브러리의 일부인 Java Collections Framework (JCF)와 그 외 추가적인 자료구조들로 나눌 수 있다.  콜렉션부터 보자.주요 콜렉션 인터페이스와 그를 구현한 클래스는 다음과 같다. List - 순서가 있고 중복을 허용하는 컬렉션:ArrayList: 배열 기반의 리스트로, 인덱스를 통한 빠른 접근이 가능하다.LinkedList: 이중 연결 리스트로, 요소의 추가와 제거가 빈번할 때 유용합니다. Vector: 스레드 안전을 제공하는 동기화된 리스트입니다.Stack: LIFO 데이터 구조를 제공하는 Vector의 하위 클래스입니다.Set - 중복을 허용하지 않는 컬렉션:HashSet: 해시 테이블을 사용하여.. 2024. 4. 14.
자바 자료구조 학습 중 궁금한 점 1. 배열은 왜 콜렉션에 없는가?콜렉션 프레임워크는 기본적으로 동적으로 크기가 조절되고, 제네릭을 통해 타입 안정성을 강화하고, 다양한 유틸리티 메서드를 제공해 개발자가 데이터를 보다 효율적으로 처리할 수 있게 돕는 걸 목표로 한다. 그런데 배열이 동적 크기 조절이 되나?배열은 만들어질 때 크기가 고정된다.한 번 생성된 후에는 크기를 변경할 수 없다.데이터를 동적으로 추가하고 제거할 수 있는 유연성을 제공하는 자바 콜렉션 프레임워크에 있는 게 더 이상한 거다.게다가 배열은 고급 기능이나 메서드를 제공하지도 않는다. 배열에는 메서드가 없다(Arrays 말하는 거 아니다. int[] 이런 거 말하는 거다.). 기본 데이터 타입 배열을 가지고 할 수 있는 건 고작 해 봐야 length를 사용.. 2024. 4. 14.