코딩테스트/자료구조 10

자료구조 총 정리

일반 배열 (int[])java.util.Arrays 사용기능설명생성int[] arr = new int[n];접근XX삽입, 삭제XX길이arr.length최대, 최소Arrays.stream(arr).max().orElse(-1)초기화Arrays.fill(arr, 1);정렬Arrays.sort(arr);전체 출력Arrays.toString(arr);일반 객체 배열 (Class[])Comparator 전달기능설명생성Class[] arr = new Class[n];접근arr[i]삽입, 삭제XX길이arr.length최대, 최소Arrays.stream(arr).max((c1, c2) -> c1.x - c2.x).orElse(null);초기화XX정렬1. 오름차순 Arrays.sort(arr, (c1, c2) -> c..

6. 우선순위 큐(PriorityQueue)

개념 정의: 우선순위가 높은 대상이 먼저 나오는(pop) 자료구조 언제 사용?: 계속해서 선택지가 업데이트(추가)되는 상황에서 가장 최선의 값을 골라야하는 상황에 사용 구현 방법 리스트와 힙 방식이 있는데, 보통 heap을 이용해서 구현 우선 순위 큐 구현 방식 삽입(push) 시간 삭제(pop) 시간 리스트 O(1) O(N) 힙(Heap) O(logN) O(logN) 최소 힙 vs 최대 힙 최소 힙(오름차순): 가장 작은 값이 먼저 나오는 것 최대 힙(내림차순): 가장 큰 값이 먼저 나오는 것 사용법 java.util의 PriorityQueue 라이브러리 사용 기본형 초기화 //기본 타입 변수는 사용 불가 PriorityQueue pq = new PriorityQueue(); 삽입(offer)/추출(p..

5. 덱(Deque)

개념 정의: 양쪽 끝에서 데이터의 삽입과 삭제가 가능한 선형 자료구조 연산: 앞쪽 삽입: d.offerFirst(v); 뒤쪽 삽입: d.offerLast(v); 앞쪽 조회: v = d.peekFirst(); 뒤쪽 조회: v = d.peekLast(); 앞쪽 삭제: d.pollFirst(); 뒤쪽 삭제: d.pollLast(); 비어있는지 확인: d.isEmpty(); 사용방법 java.util의 Deque 인터페이스와 LinkedList 클래스 사용 선언 Deque deque = new LinkedList(); 앞쪽 삽입 덱의 맨 앞에 값 삽입 deque.offerFirst(1); // 또는 deque.addFirst(1); 뒤쪽 삽입 덱의 맨 뒤에 값 삽입 deque.offerLast(2); // 또는..

4. 큐(Queue)

개념 정의: 데이터를 선입선출(FIFO) 방식으로 관리하는 자료구조 연산: 삽입: q.offer(v); 조회: v = q.peek(); 삭제: v = q.poll(); 비어있는지 확인: q.isEmpty(); 사용방법 java.util의 Queue 인터페이스와 LinkedList 클래스 사용 선언 Queue queue = new LinkedList(); 삽입 큐의 맨 뒤에 값 삽입 queue.offer(1); 조회 큐의 맨 앞(front) 값을 조회 int a = queue.peek(); 삭제 큐의 맨 앞(front) 값을 삭제하고 그 값을 반환 queue.poll(); 큐 비어있는지 확인 // 큐가 비어있다면 true 반환 queue.isEmpty();

3. 스택(Stack)

개념 정의: 데이터를 후입선출(FILO)로 구현하는 방법 연산: 삽입(push) 조회(peek) 삭제(pop) 비어있는지 확인(isEmpty) 언제 사용? 조건에 맞는 값들 중에서 가장 마지막(최신)의 것이 최적의 해인 경우 사용 탑: https://www.acmicpc.net/problem/2493 사용방법 java.util의 Stack라이브러리 사용 선언 Stack stack = new Stack(); 삽입 스택의 맨위(top)에 값 삽입 stack.push(1); 조회 스택의 맨위(top) 값을 조회 int a = stack.peek(); 삭제 스택의 맨위(top) 값을 삭제 리턴값 없음 stack.pop() 스택 비어있는지 확인 //빈 스택이라면 true 발생 stack.isEmpty()

2. Map & HashMap

사용법 요약 삽입: map.put(key값, value값) 조회: map.get(key값) 키 조회: Set keys = map.keySet(); 삭제: map.remove(key값) 전체 출력: map.toString(); 개념 정의 Map 정의: 키(key)와 값(value)을 저장하는 데이터 구조의 인터페이스 HashMap 정의: Map 인터페이스의 구현체, 해시 테이블을 사용하여 키와 값을 저장 즉, 해시 함수를 통해 키와 값을 저장 -> 값 접근 성능이 좋음 HashMap 특징 키와 값은 모두 객체여야 한다. 기존에 저장된 키와 동일한 키로 값이 저장되면, 기존의 값이 새로운 값으로 대치된다. 저장 공간보다 값이 추가로 들어오면, 저장공간을 약 2배로 늘림 따라서, 초기에 값 개수가 정해져 있다..

1-2. ArrayList<>사용법 (기본 타입, 객체 배열)

개념 오로지 기본 타입 말고 래퍼 타입만 사용 가능 값 접근(읽기): O(1) - 인덱스를 사용하여 바로 접근 가능 값 삭제/삽입: O(n) - 주변에 있는 값들을 옮겨주는 오버헤드 발생. 삭제 시 뒤의 원소들을 앞으로 당김, 삽입 시 기존 원소들을 뒤로 밀어냄 ArrayList 연산 종류 정리 생성 값 접근(읽기): list.get(1); 값 삽입, 삭제: list.add(); list.remove(); 리스트 크기: list.size() 리스트 최대,최소: Collections.max(list), Collections.min(list) 리스트 전체 초기화: Collections.fill(list, 값) 리스트 전체 출력: list.toString() 리스트 정렬: Collections.sort(lis..

1. 일반 배열(int[ ]) 사용법 (기본타입, 객체 배열)

개념 값 접근(읽기): O(1) - 인덱스를 사용하여 바로 접근 가능 값 삭제/삽입: O(n) - 주변에 있는 값들을 옮겨주는 오버헤드 발생 일반 배열 연산 종류 정리 생성 값 접근(읽기) 값 삽입, 삭제: 일반 배열로 감히 삽입,삭제를 할 생각하지 마라 배열 길이: arr.length 배열 최대,최소: Arrays.stream(arr).max().orElse(-1); 배열 전체 초기화: Arrays.fill(arr,1); 베열 전체 출력: Arrays.toString(arr) 배열 정렬: Arrays.sort(arr) 배열 생성 //배열 선언 int[] test = new int[n]; //배열 선언 및 초기화 int[] test = {1,2,3}; 배열 길이 int[] arr = new int[n];..

0. 자바에서 (x,y)를 리스트에 넣는 방법

배경 자바 언어를 사용하여 코딩하다보면, 때때로 (x, y) 형태의 데이터를 리스트에 저장해야 하는 경우가 발생 파이썬에서는 이런 작업이 쉽게 처리되지만, 자바에서는 약간 다른 접근 방식이 필요 따라서 자바 환경에서 해당 작업을 수행하는 방법을 정리하였음. 사용법 [ ] 배열 사용법 언제 가능?: x,y 값이 동일한 자료형인 경우에 사용 가능 장점: 별도의 코드 작성 없이 빠르고 간편하게 사용 가능 단점: x,y값에 대한 접근을 오로지 인덱스로만 해야해서 인덱스 의미를 잘 기억해야함 [ ] 배열을 삽입 하는 방법 Stack stack = new Stack(); //값 삽입 stack.push(new int[] {1, 3}); //값 조회 int[] node = stack.peek(); node[0]; /..