| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
| 31 |
- Python
- 플러터
- 개발자 취업
- 오블완
- DP
- ML
- 코테 파이썬
- vue
- Flutter
- 파이썬 코테
- 알고리즘
- 개발자취업
- 뷰
- 안드로이드
- Laravel
- C++
- c++ 코테
- 라라벨
- 백준
- 파이썬
- 코딩테스트준비
- 티스토리챌린지
- 코테
- flutter getx
- react
- 항해99
- 99클럽
- 코딩테스트
- 코딩테스트 준비
- til
- Today
- Total
잡다로그
[C++/코테] 투 포인터 - 개념, 백준 예제 본문
투 포인터
- 배열에서 원래 이중 for문으로 $O(N^2)$에 처리되는 작업을 2개의 포인터의 움직임으로 $O(N)$에 해결하는 알고리즘
- 투포인터와 이분탐색은 호환되는 문제가 많다.
- 인덱스 하나 차이로 오류가 날 수 있음을 주의해야 한다.
연습문제
백준 2230 수 고르기: https://www.acmicpc.net/problem/2230
✔️ 배열을 정렬한 뒤 st와 en 을 활용하여 차이 값을 구해본다. 이 때 각 st에 대해 모든 en을 보는 것이 아니라, 이전의 en 값을 가지고 있다가 써먹는 것.
✔️반복을 멈추는 조건과 예외처리에 주의한다.
2230번: 수 고르기
N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어
www.acmicpc.net
백준 1806 부분합: https://www.acmicpc.net/problem/1806
✔️ 배열을 정렬한 뒤 st와 en 을 활용하여 차이 값을 구해본다.
✔️ 투포인터는 $O(N)$, 이분탐색으로 해결하면 $O(NlogN)$ 소요된다.
1806번: 부분합
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
www.acmicpc.net
백준 10025 게으른 백곰: https://www.acmicpc.net/problem/10025
✔️ 투 포인터의 응용형인 슬라이딩도어 알고리즘을 활용할 수 있다.
10025번: 게으른 백곰
첫 줄에 정수 N과 K가 들어온다. 둘째 줄부터 N째 줄까지, 공백을 사이에 두고 각 양동이의 얼음의 양을 나타내는 gi와 양동이의 좌표를 나타내는 xi가 주어진다.
www.acmicpc.net
'Algorithm' 카테고리의 다른 글
| [Python/코테] 백준 2295 세 수의 합 (0) | 2023.12.14 |
|---|---|
| [C++/코테] 해시 - 개념, 백준 예제 (0) | 2023.12.04 |
| [Python/코테] 백준 18870 좌표 압축 (0) | 2023.12.04 |
| [C++/코테] 이진탐색 - 개념, 백준 예제 (0) | 2023.12.04 |
| [Python/코테] 백준 4948 베르트랑 공준 (0) | 2023.12.02 |