JAVA/Coding Test

[JAVA] 백준 7795 먹을 것인가 먹힐 것인가_정렬

오늘도개발 2024. 6. 3. 18:11

 

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

 

 

접근 : 

 

 - a 집합과 b 집합을 오름차순으로 정렬한다.

 

 - a 와 b 에서 하나씩 꺼내서 비교한다. 만약 a 가 작다면 a가 현재 b보다 클 때까지 다음 수를 꺼낸다. 

 

 - 만약 a가 b 보다 큰 경우에는 정답의 갯수를 a 의 전체 갯수 - 현재 인덱스 로 더한다.

 

 - a 와 b 둘 중 한 집합의 원소를 모두 꺼낼 때 까지 반복 후 결과를 출력한다.

 

 

 

 

 

코드구현 

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());

        for(int i = 0 ; i < t ; i++){
            int answer = 0;
            String[] temp = br.readLine().split(" ");
            int n = Integer.parseInt(temp[0]);
            int m = Integer.parseInt(temp[1]);

            List<Integer> a = new ArrayList<>();
            List<Integer> b = new ArrayList<>();

            String[] temp_a = br.readLine().split(" ");
            String[] temp_b = br.readLine().split(" ");

            for(int j = 0 ; j < n; j ++) a.add(Integer.parseInt(temp_a[j]));
            for(int k = 0 ; k < m; k ++) b.add(Integer.parseInt(temp_b[k]));

            Collections.sort(a);
            Collections.sort(b);

            int flag_a = 0;
            int flag_b = 0;

            while(flag_a < a.size() && flag_b < b.size()){
                //a 가 큰 경우 정답의 갯수를 올리고 다음 b를 가져옴
                if(a.get(flag_a) > b.get(flag_b)){
                    answer += (a.size() - flag_a);
                    flag_b++;
                    continue;
                }
                flag_a++;
            }
            sb.append(answer).append('\n');
        }
        System.out.println(sb.toString());
        br.close();
    }
}