투 포인터
2개의 포인터를 활용해 문제를 푸는 방식이다.
일반적으로
- 두 개의 포인터가 모두 앞에서 시작하는 경우
- 하나는 앞, 하나는 뒤에서 시작하는 경우
로 구분된다.
이를 활용하는 문제를 바로 보자.
백준: 수들의 합 5
https://www.acmicpc.net/problem/2018
2018번: 수들의 합 5
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한
www.acmicpc.net
해당 문제는 정수 N이 주어질 때 N 미만의 연속된 자연수의 합으로 N을 나타낼 수 있는 경우의 수를 구해야 한다.
만약 N이 6이라면 답은 2(1+2+3, 6)이다.
이 문제는 투 포인터를 이용하면 쉽게 풀 수 있는데,
N = 6일 때 과정은 아래와 같다.
- 더한 값(sum)이 N보다 작으면 L을 움직이고 값을 더한다.
- sum이 N보다 크면 R을 움직이고 값을 뺀다.
- sum이 6일 때 answer를 1씩 증가해 배열의 마지막까지 탐색하면 종료한다.
투 포인터를 떠올린다면 쉽게 풀 수 있다.
이와 달리 L은 왼쪽, R은 오른쪽에서 시작하는 경우의 문제도 있다.
아래 문제가 그것으로 투 포인터를 이용하면 쉽게 풀 수 있다.
백준: 주몽
https://www.acmicpc.net/problem/1940
1940번: 주몽
첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고
www.acmicpc.net
'Algorithm & PS > Algorithm' 카테고리의 다른 글
알고리듬 - 버블, 선택, 삽입 정렬 (0) | 2023.06.27 |
---|---|
알고리듬 - 슬라이딩 윈도우 (0) | 2023.06.26 |
알고리듬 - 구간 합 (0) | 2023.06.24 |
알고리듬 - 시간복잡도(Time Complexity) (0) | 2023.06.22 |
알고리듬 - dx, dy를 이용한 이차원 배열 이동 (0) | 2023.06.21 |