[백준] 7795번 먹을 것인가 먹힐 것인가 (C++, 정렬 혹은 이분탐색)

728x90
반응형

정렬 혹은 이분탐색으로 많이 풀던데 나는 내림차순 정렬해놓고 

i, j 를 모두 0으로 초기화한 다음 a가 더 작으면 i를 증가, b가 크면 j를 증가시키는 방식으로 비교해줬다

O(n+m) 이라고 생각됨

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;


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

	int t;
	cin >> t;
	while (t--) {
		int a[20000];
		int b[20000];
		int n, m;
		cin >> n >> m;
		for (register int i = 0; i < n; i++) {
			cin >> a[i];
		}
		for (register int i = 0; i < m; i++) {
			cin >> b[i];
		}
		sort(a, a + n,greater<int>());
		sort(b, b + m,greater<int>());

		int cnt = 0;
		int i = 0, j = 0;
		while (i < n && j < m) {
			if (a[i] <= b[j]) {
				j++;
			}
			else {
				cnt += m - j;
				i++;
			}

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

 

728x90
반응형
TAGS.

Comments