๐Ÿ•๏ธ ICPC Sinchon/Two Pointer

[BOJ][C++] ๋ฐฑ์ค€ 7795๋ฒˆ: ๋จน์„ ๊ฒƒ์ธ๊ฐ€ ๋จนํž ๊ฒƒ์ธ๊ฐ€

์„ ๋‹ฌ 2024. 8. 19. 05:09
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/7795

 

๋ฌธ์ œ

์‹ฌํ•ด์—๋Š” ๋‘ ์ข…๋ฅ˜์˜ ์ƒ๋ช…์ฒด A์™€ B๊ฐ€ ์กด์žฌํ•œ๋‹ค. A๋Š” B๋ฅผ ๋จน๋Š”๋‹ค. A๋Š” ์ž๊ธฐ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋จน์ด๋งŒ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, A์˜ ํฌ๊ธฐ๊ฐ€ {8, 1, 7, 3, 1}์ด๊ณ , B์˜ ํฌ๊ธฐ๊ฐ€ {3, 6, 1}์ธ ๊ฒฝ์šฐ์— A๊ฐ€ B๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์Œ์˜ ๊ฐœ์ˆ˜๋Š” 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 8-3, 8-6, 8-1, 7-3, 7-6, 7-1, 3-1.

๋‘ ์ƒ๋ช…์ฒด A์™€ B์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, A์˜ ํฌ๊ธฐ๊ฐ€ B๋ณด๋‹ค ํฐ ์Œ์ด ๋ช‡ ๊ฐœ๋‚˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” A์˜ ์ˆ˜ N๊ณผ B์˜ ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A์˜ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์ง€๋ฉฐ, ์…‹์งธ ์ค„์—๋Š” B์˜ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ์ฃผ์–ด์ง„๋‹ค. ํฌ๊ธฐ๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. (1 ≤ N, M ≤ 20,000) 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, A๊ฐ€ B๋ณด๋‹ค ํฐ ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

ํˆฌํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์ž

 

a์™€ b์— ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜๊ณ 

์กฐ๊ฑด์— ๋งž๋Š” ์Œ์„ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

๊ธ€๋ณด๋‹ค๋Š” ์ฝ”๋“œ๋กœ ๋ณด๋Š”๊ฒŒ ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค

// ํ’€์ด : https://whkakrkr.tistory.com

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

using namespace std;

int main() {
    int t;
    cin >> t;
    while(t--) {
        // ์ž…๋ ฅ
        int n,m;
        cin >> n >> m;
        vector<int>a(n);
        vector<int>b(m);
        for(int i=0; i<n; i++) {
            cin >> a[i];
        }
        for(int i=0; i<m; i++) {
            cin >> b[i];
        }
        
        // ํ’€์ด
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        int indexA = n-1;
        int indexB = m-1;
        int ans = 0;
        while(indexA>=0 && indexB>=0) {
            while(a[indexA] <= b[indexB]) {
                indexB--;
            }
            ans += indexB+1;
            indexA--;
        }
        
        // ์ถœ๋ ฅ
        cout << ans << "\n";
    }
    
    return 0;
}
๋ฐ˜์‘ํ˜•