문제

먹을 것인가 먹힐 것인가 백준 7795

"맞았습니다."코드

#include <bits/stdc++.h>
using namespace std;

int tc, n, m, num;
vector<int> a, b;
int solve(){

  int answer = 0;
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());

  for(int i = a.size()-1; i >= 0; i--){
    for(int j = b.size()-1; j >= 0; j--){
      if(a[i] > b[j]) {
        answer += j + 1;
        break;
      }
    }
  }
  return answer;
}

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

  cin >> tc;
  while(tc--){
    cin >> n >> m;
    a.clear(); b.clear();
    while(n--) { cin >> num; a.push_back(num); }
    while(m--){ cin >> num; b.push_back(num); }
    cout << solve() << '\n';
  }
  return 0;
}

리뷰

main 함수에서는 입력만 받았고. 핵심은 solve() 함수이다.
벡터 a와 b를 각각 정렬한다.

a의 가장 큰 수와 b의 가장 큰 수를 비교한다.
a[i] > b[j] 라면, b의 모든 수를 a[i]가 먹을 수 있다. 따라서 바로 answer를 증가시키고 break;한다.

그 다음 두 번째로 큰 숫자 a[i]와 b의 가장 큰 수를 비교한다.
a[i] > b[j] 를 만족하지 못하면, b의 인덱스 j를 감소시키면서 먹을 수 있을 때 까지 순회한다.
먹을 수 있는 크기가 나타나면 j+1만큼 크기를 answer에 더해준다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

접미사 배열 백준 11656 c++  (0) 2021.12.20
1로 만들기 백준 1463번 c++  (0) 2021.12.20
빈도 정렬 백준 2910 c++  (0) 2021.12.19
단어 정렬 백준 1181 c++  (0) 2021.12.18
수 정렬하기 5 백준 15688 c++  (0) 2021.12.18

+ Recent posts