백준/증가수열 & 투포인터

[백준 1940번 / C++] 주몽

배발자 2022. 2. 10.
반응형

투포인터를 활용한 문제이다. 

 

두개의 재료가 합쳐져서 M이라는 값과 일치해야만 갑옷이 만들어진다는 점을 고려해서 풀어보자. 

 

1. 벡터에 재료들의 고유번호를 오름차순으로 정렬해서 저장한다. 

2. 첫번째 원소와 마지막번째 원소를 S와 E라는 변수에 각각 저장한다. 

3. 벡터의 S 포인터의 원소와 E 포인터의 원소를 더했을 때 M인지를 확인한다. 

 - M보다 작다면 S의 값을 올려준다 (원소의 값을 증가시키는 역할) 

 - M보다 크다면 E의 값을 내려준다 (원소의 값을 감소시키는 역할)

 - M가 일치하면 RESULT 값을 증가시켜 준다. 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; 
int main() {
	int n, m; 
	vector <int> v; 
	cin >> n >> m; 
	for (int i = 0; i < n; i++) {
		int a; cin >> a; 
		v.push_back(a); 
	}
	sort(v.begin(), v.end()); 
	int s, e; 
	s = 0; 
	e = v.size() - 1;
	int result = 0; 
	while (s < e) {
		if (v[s] + v[e] < m) s++;
		else if (v[s] + v[e] > m)e--;
		else {
			result++; 
			e--; 
		}
	}
	cout << result; 
}

 

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net

반응형

댓글