백준 1940 c++

magicdrill·2024년 4월 20일

백준 문제풀이

목록 보기
331/673

백준 1940 c++

쉬운 문젠데 왜 이렇게 잡생각을 많이 했을까.
다른 분 풀이를 보니까 bool 배열을 통해 존재여부만 확인하신 분도 계셨다. 그런식으로 다시 풀어봐야 겠다.

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

using namespace std;

void input_element(int* N, int* M, vector<int>& element)
{
	int i, temp;

	cin >> *N;
	cin >> *M;
	//exist.resize(10000001, false);
	for (i = 0; i < *N; i++)
	{
		cin >> temp;
		element.push_back(temp);
	}

	return;
}

void find_answer(int N, int M, vector<int>& element)
{
	int i, j, sum = 0, count = 0;
	int left = 0, right = element.size() - 1;

	sort(element.begin(), element.end());
	// 1 2 3 4 5 7
	for (i = left; i < element.size() - 1; i++)
	{
		//두개 합쳐서 M이 되어야 함. 더도말고 덜도 말고
		//정렬이 의미가 있나? 있는 듯
		//메모리 제한이 좀 빡센데
		for (j = right; j > i; j--)
		{
			if (element[i] + element[j] == M)
			{
				count++;
				right = j;
				break;
			}
		}
	}
	cout << count << "\n";

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, M;
	vector <int> element;
	vector <bool> exist;

	input_element(&N, &M, element);
	find_answer(N, M, element);

	return 0;
}

0개의 댓글