[c++/백준] 3273번: 두 수의 합

조히·2023년 8월 18일
0

PS

목록 보기
81/82
post-thumbnail

문제 링크

3273번: 두 수의 합

풀이

  1. 서로 다른 정수이기 때문에 투포인터로 풀면 된다.
  2. 오름차순 정렬 후 왼쪽 포인터, 오른쪽 포인터로 나누어서
    2-1. 같으면 answer++ 후, left++, right++ 해준다.
    2-2. 크다면 right--, 작다면 left++ 해준다.
  3. 왼쪽 포인터가 오른쪽 포인터보다 같거나 커질 때까지 해준다.

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	int answer = 0;
	int n, k;
	cin >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}
	cin >> k;

	sort(v.begin(), v.end());

	int left = 0;
	int right = n - 1;
	while (left < right)
	{
		if (v[left] + v[right] == k)
		{
			answer++;
			left++;
			right--;
		}
		else if (v[left] + v[right] > k)
		{
			right--;
		}
		else
		{
			left++;
		}
	}

	cout << answer << endl;
}
profile
Juhee Kim | Game Client Developer

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기