티스토리 뷰

알고리즘/백준

백준 2831 (댄스 파티) - java

김다미김태리신시아 2023. 7. 19. 22:16

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

 

2831번: 댄스 파티

남자 N명과 여자 N명이 상근이가 주최한 댄스 파티에 왔다. 상근이는 모든 사람의 키를 알고있다. 각 남자는 모두 여자와 춤을 출 수 있고, 여자는 남자와 춤을 출 수 있다. 모든 사람은 많아야 한

www.acmicpc.net

(+ , - ) , ( - , +) 조합을 만들고 계산하자 !

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

public class Main {
    static int n = 0;
    static int m = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        n = Integer.parseInt(st.nextToken());
        ArrayList<Integer> lM = new ArrayList<>();
        ArrayList<Integer> bM = new ArrayList<>();
        ArrayList<Integer> lW = new ArrayList<>();
        ArrayList<Integer> bW = new ArrayList<>();

        st = new StringTokenizer(br.readLine(), " ");
        for(int i=1;i<=n;i++)
        {
            int tmp = Integer.parseInt(st.nextToken());

            if(tmp > 0)
            {
                bM.add(tmp);
            }

            else
                lM.add(tmp);
        }

        st = new StringTokenizer(br.readLine(), " ");
        for(int i=1;i<=n;i++)
        {
            int tmp = Integer.parseInt(st.nextToken());

            if(tmp > 0)
            {
                bW.add(tmp);
            }

            else
                lW.add(tmp);
        }

        Collections.sort(lM,(x,y) -> x - y);
        Collections.sort(bM,(x,y) -> y -x);
        Collections.sort(lW,(x,y) -> x - y);
        Collections.sort(bW,(x,y) -> y -x);

        int count = 0;

        count += sum(lM,bW);
        count += sum(lW,bM);

        System.out.println(count);

        br.close();
    }

    static int sum(ArrayList<Integer> s , ArrayList<Integer> b)
    {
        int count = 0;
        int sLen = s.size();
        int bLen = b.size();

        int sIdx = 0;
        int lIdx = 0;

        while(sIdx < sLen && lIdx < bLen)
        {
            if(Math.abs(s.get(sIdx)) > Math.abs(b.get(lIdx)))
            {
                count = count + 1;
                sIdx = sIdx + 1;
                lIdx = lIdx + 1;
            }

            else{
                lIdx = lIdx + 1;
            }
        }

        return count;
    }