카테고리 없음

[BOJ 7795] S3 먹을 것인가 먹힐 것인가 { C++ }

surimi🍥 2022. 7. 11. 00:42
반응형

7795번: 먹을 것인가 먹힐 것인가

 

7795번: 먹을 것인가 먹힐 것인가

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을

www.acmicpc.net

C++ (400ms)

  • 입력받은 두 배열을 정렬 한 뒤,
  • 2중 반복문을 돌리며 arr 배열의 원소가 brr 배열의 원소보다 작거나 같기 전까지 cnt를 하나씩 올린다.
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    cin.tie(0)->sync_with_stdio(0);

    int T;
    cin >> T;
    while (T--)
    {
        int A, B, i, cnt = 0;
        cin >> A >> B;
        int arr[A], brr[B];
        for (i = 0; i < A; i++)
            cin >> arr[i];
        for (i = 0; i < B; i++)
            cin >> brr[i];
        
        sort(arr, arr+A);
        sort(brr, brr+B);

        for (int n : arr)
        {
            if (n == 1) continue;
            for (int k : brr)
            {
                if (n <= k) 
                    break;
                cnt++;
            }
        }
        cout << cnt << "\\n";
    }
}

C++ (32ms)

  • 입력받은 두 배열을 정렬 한 뒤,
  • arr와 brr를 동시에 한 반복문으로 돌리는데,
  • arr[i] brr[j]를 비교하며 arr[i]가 크면 i 인덱스부터 마지막 인덱스까지의 개수를 cnt에 추가한다.
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    cin.tie(0)->sync_with_stdio(0);

    int T;
    cin >> T;
    while (T--)
    {
        int A, B, i, j, cnt = 0;
        cin >> A >> B;
        int arr[A], brr[B];
        for (i = 0; i < A; i++)
            cin >> arr[i];
        for (i = 0; i < B; i++)
            cin >> brr[i];
        
        sort(arr, arr+A);
        sort(brr, brr+B);
        i = 0, j = 0;
        while (i < A && j < B)
            if (arr[i] > brr[j])
                cnt += A - i, j++;
            else i++;

        cout << cnt << "\\n";
    }
}
반응형