Java 코테 핵심이론 (배열, 리스트, 구간 합, 스택, 큐)
2022. 12. 27. 22:02
03 자료구조
3-1. 배열과 리스트
배열과 리스트는 비슷한 점이 많지만 두 자료구조의 특징을 정확하게 이해하고 문제가 요구하는 조건에 따라 적절하게 선택해 사용하는 것이 중요
배열
- 배열은 메모리 연속 공간에 값이 채워져 있는 형태의 자료구조로 인덱스를 통해 참조할 수 있다.
- 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. (주변에 있는 값을 이동시키는 과정 필요)
- 배열의 크기는 선언할 때 지정할 수 있으며, 한번 선언하면 크기를 늘리거나 줄일 수 없다.
- 구조가 간단하므로 코딩 테스트에서 많이 사용한다.
리스트
- 리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조입니다.
- 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야한다. (즉, 접근하는 속도가 느리다.)
- 포인터로 연결되어 있으므로 데이터를 삽입하거나 삭제하는 연산 속도가 빠르다.
- 선언할 때 크기를 별도로 지정하지 않아도 된다. 즉, 리스트의 크기는 정해져 있지 않으며, 크기가 변하기 쉬운 데이터를 다룰 때 적절하다.
- 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡하다.
실제 코딩테스트에서 리스트를 직접 구현하는 경우는 굉장히 드물다. 자바같은 경우에는 ArrayList나 LinkedList를 제공해준다.
정리하자면 데이터의 수가 고정되어 있거나 접근하는 경우가 많으면 배열을 사용하는 것이 유리하고, 데이터 크기가 별도로 지정되어 있지 않거나 데이터 삽입 삭제 경우가 많으면 리스트를 사용한다.
3-2. 구간 합
구간 합이란 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘이다.
합 배열이란 S[i] = A[0] + A[1] + ... + A[i-1] + A[i]
즉, S[i] = S[i-1] + A[i] 이다.
합 배열을 미리 구해놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N)에서 O(1)로 감소한다.
i에서 j까지 구간 합을 구하는 공식은 S[j] - S[i-1] 이다.
3-3. 스택과 큐
스택과 큐는 배열에서 발전된 형태의 자료구조입니다.
스택
스택은 선입후출 형식으로 주로 깊이 우선 탐색(DFS) 또는 백트래킹 종류의 코딩테스트에 사용한다.
재귀 함수 알고리즘 원리랑 비슷하며 원리를 잘 알아둬야한다.
top : 삽입과 삭제가 일어나는 위치
push : top 위치에 새로운 데이터를 삽입하는 연산
pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산
peek : top 위치에 현재 있는 데이터를 단순 확인하 연산
큐
큐는 선입선출 형식으로 너비 우선 탐색(BFS)에서 자주 사용한다.
rear : 큐에서 가장 끝 데이터를 가리키는 영역
front : 큐에서 가장 앞의 데이터를 가리키는 영역
add : rear 부분에 새로운 데이터를 삽입하는 연산
poll : front 부분에 있는 데이터를 삭제하고 확인하는 연산 (pop이랑 비)
peek : 큐의 맨 앞(front)에 있는 데이터를 확인할 때 사용하는 연산
'코테뿌수기 - java > 이론 정리' 카테고리의 다른 글
Java 코테 핵심이론 (그리디, 정수론) (0) | 2022.12.28 |
---|---|
Java 코테 핵심이론 (DFS, BFS, 이진탐색) (0) | 2022.12.28 |
Java 코테 핵심이론 (버블정렬, 선택정렬) (0) | 2022.12.28 |
Java 코테 핵심이론 (시간복잡도, 디버깅) (0) | 2022.12.27 |
Java 기본 문법 정리 (0) | 2022.12.27 |