[백준 실버3] 3273 : 두 수의 합

수민이슈·2023년 10월 7일
0

[C++] 코딩테스트

목록 보기
85/116
post-thumbnail

🖊️ 문제

https://www.acmicpc.net/problem/3273


🖊️ 풀이

일단 딱 봤을 때,
그리디로 풀까? 싶기도 했음

왜냐면 문제가

이거임

근데 어차피 순서가 정해진 순서쌍이면 조합이잖아?

정렬해두고 앞뒤에서 하나씩 뽑으면 될 것 같았다.

그래서 그냥 바로 투포인터 이분탐색 했더니 바로 맞음!!

투포인터로 순식간에 성공한건 첨이라 뿌딧 ㅎ
실3이지만,,

뭐 이렇게 꾸준히 하다보면 늘겠지!!

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

int arr[100'001];

int main()
{
	int n, x;
	cin >> n;

	for (int i = 0; i < n; i++)
		cin >> arr[i];

	cin >> x;

	sort(arr, arr + n);

	int left = 0;
	int right = n - 1;
	int mid = 0;
	int result = 0;
	while (left < right) {
		mid = arr[left] + arr[right];
		if (mid == x) {
			result++;
			left++;
		}
		else if (mid < x) left++;
		else right--;
	}
	cout << result << endl;
} 

0개의 댓글