일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백준
- 가장 짧은 문자거리
- 두 배열 합치기
- 10992
- 보이는 학생
- GitHub #Commit #BaekJoon
- 뒤집은 소수
- 배열
- java
- 자바
- 알고리즘
- Two Pointer
- 인프런
- 큰 수 출력하기
- 공통원소 구하기
- Pointer
- 등수구하기
- 아스키코드
- 코테준비
- 연속부분수열
- 누적 계산
- 최대 길이
- ArrayList
- 투 포인터
- 점수계산
- 모든행과열대각선의합
- 임시반장 정하기
- 격자판
- array
- 10991
- Today
- Total
ezhoon
투 포인터, 슬라이딩 윈도우 본문
투 포인터와 슬라이딩 윈도우
두 알골리즘은 1차원 배열을 2회 이상 반복적으로 탐색해야 할 경우 O(N^2) 이상 걸릴 시간 복잡도를 부분 배열을 활용하여
O(N)으로 줄일 수 있다는 공통점이 있습니다.
이 두 알고리즘의 차이는
사용자가 찾고자 하는 부분 배열의 길이의 변화 여부 입니다.
- 투 포인터 (가변적 길이)
- 슬라이딩 윈도우 (고정적 길이)
투 포인터
길이가 가변적인 부분 배열들을 활용하여 특정 조건을 일치시키는 알고리즘 입니다.
예시로 두 배열이 주어지고 그 배열의 공통 원소를 구한다고 할 때, 배열을 정렬 후
각 배열의 포인터를 하나씩 만들어 준 다음 같은 값이 나오면 두 포인터 다 + 1
만약 같은 값이 안나왔을 경우 더 작은 값의 포인터는 그대로 둔 뒤 더 작은 값의 배열의 포인터를 +1 해준다.
이런 식으로 사용하는 알고리즘을 투 포인터 방식이라고 한다.
위에 설명한 문제를 아래의 표로 예시를 들어보겠습니다.
1)
A | 1 A[pi] | 5 | 9 | 10 |
B | 4 B[pj] | 9 | 10 | 15 |
2)
A | 1 | 5 A[pi] | 9 | 10 |
B | 4 B[pj] | 9 | 10 | 15 |
3)
A | 1 | 5 A[pi] | 9 | 10 |
B | 4 | 9 B[pj] | 10 | 15 |
4)
A | 1 | 5 | 9 A[pi] | 10 |
B | 4 | 9 B[pj] | 10 | 15 |
5)
A | 1 | 5 | 9 | 10 A[pi] |
B | 4 | 9 | 10 B[pj] | 15 |
예제)
2022.01.21 - [인프런_자바_알고리즘_기초/Two pointers, Sliding window] - [인프런] 03-01 두 배열 합치기
2022.01.21 - [인프런_자바_알고리즘_기초/Two pointers, Sliding window] - [인프런] 03_02 공통원소 구하기
슬라이딩 윈도우
부분 배열의 길이(크기)가 고정적이기 때문에 창문을 왼쪽부터 오른쪽으로 밀어 오면서 일정한 배열의 값들을 구할 때 사용합니다.
투 포인터와 다르게 변수가 2개 일 필요가 없으며, 각 배열의 끝을 알 수 있습니다.
아래와 같은 그림이 슬라이딩 윈도우 예시입니다.
Current(현재 배열) -> Next(다음 배열) 갈때 창문틀이 움직이면서 포함되지 않는 값들은 빼버리며 포함되는 값들을 더해줍니다.
예제)
2022.01.21 - [인프런_자바_알고리즘_기초/Two pointers, Sliding window] - [인프런] 03_03 최대 매출
'[Java] 인프런 문제풀이 > Two pointers, Sliding window' 카테고리의 다른 글
[인프런] 03_05 연속된 자연수의 합 (Two pointer) (0) | 2022.01.21 |
---|---|
[인프런] 03_04 연속 부분 수열 (Two pointers) (0) | 2022.01.21 |
[인프런] 03_03 최대 매출 (0) | 2022.01.21 |
[인프런] 03_02 공통원소 구하기 (0) | 2022.01.21 |
[인프런] 03-01 두 배열 합치기 (0) | 2022.01.21 |