투포인터 문제
처음 접근: 정렬을 한 후 0부터 i-1번째 사이에서 두 개의 합 == arr[i]를 찾는다.
틀림 -> 음수도 존재하기 때문에 -5 5 15에서 5를 찾는다면 15도 체크해야함.
따라서 0부터 n-1까지 모든 정렬된 배열을 순회하면서 arr[i]값을 찾는다. 단, l이나 r이 i와 같은 경우엔 값을 바꿔줘야 한다.
#include <stdio.h>
#include <algorithm>
using namespace std;
int arr[2000];
int main(void)
{
int n, result = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
sort(arr, arr + n);
for (int i = 0; i < n; i++)
{
int l = 0, r = n - 1;
if (i == 0)
{
l = 1;
}
if (i == n - 1)
{
r = n - 2;
}
while (l < r)
{
int sum = arr[l] + arr[r];
if (sum > arr[i])
{
r--;
if (r == i)
{
r--;
}
}
else if (sum < arr[i])
{
l++;
if (l == i)
{
l++;
}
}
else
{
result++;
break;
}
}
}
printf("%d\n", result);
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1181] 단어 정렬 (0) | 2020.11.28 |
---|---|
[백준 7785] 회사에 있는 사람 (0) | 2020.11.28 |
[백준 2467] 용액 (0) | 2020.11.27 |
[백준 14921] 용액 합성하기 (0) | 2020.11.27 |
[백준 1822] 차집합 (0) | 2020.11.27 |
댓글