[백준 3273] 두 수의 합

Date:     Updated:

카테고리:

태그:

난이도

실버 III

📜문제

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

image

🔎접근

🌞풀이

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	int N = 0;
	cin >> N;
	vector<int> v(N);

	for (int i = 0; i < N; i++)
	{
		cin >> v[i];
	}

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

	int X = 0;
	cin >> X;

	int start = 0;
	int end = v.size() - 1;

	int cnt = 0;
	while (start < end)
	{
		int sum = v[start] + v[end];
		if (sum >= X)
		{
			if (sum == X) cnt++; // 합이 X인 경우
			end--;
		}
		else start++;
	}

	cout << cnt << "\n";
	return 0;
}

일정 범위 안에서 서로 다른 두 수의 합이 X가 되는 경우를 찾는것이라 투 포인터를 통해 두 값을 이동해 가면서 값을 구한다. 맨 위로 이동하기

BOJ 카테고리 내 다른 글 보러가기

댓글남기기