ALGORITHM
백준 2831 댄스 파티 (Java)
공부하는_다온
2023. 9. 12. 22:07
1. 문제 링크
2831번: 댄스 파티
남자 N명과 여자 N명이 상근이가 주최한 댄스 파티에 왔다. 상근이는 모든 사람의 키를 알고있다. 각 남자는 모두 여자와 춤을 출 수 있고, 여자는 남자와 춤을 출 수 있다. 모든 사람은 많아야 한
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
1. 키가 작은 여자와 키가 큰 여자, 키가 작은 남자와 키가 큰 여자로 나누어서 저장한다.
2. 전부 정렬한다.
3. 여자와 남자 각각 인덱스 번호를 가지고, 조건이 성립하는 경우에만 커플의 수를 증가한다.
4. 그 외에는 조건에 맞을 때까지 키가 커야 하는 조건의 사람이 커질 때까지 인덱스 번호를 증가한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
static int N, couple;
static ArrayList<Integer> tMan, sMan, tWoman, sWoman;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//음수면 작은 사람이랑 추길 원하는
//양수면 큰 사람이랑 추길 원하는
int N = Integer.parseInt(br.readLine());
tMan = new ArrayList<>();
sMan = new ArrayList<>();
tWoman = new ArrayList<>();
sWoman = new ArrayList<>();
String[] split1 = br.readLine().split(" ");
String[] split2 = br.readLine().split(" ");
for(int i=0;i<N;i++) {
int a = Integer.parseInt(split1[i]);
int b = Integer.parseInt(split2[i]);
if(a > 0) {
sMan.add(a);
}
else {
tMan.add(a*-1);
}
if(b > 0) {
sWoman.add(b);
}
else {
tWoman.add(b*-1);
}
}
//정렬
Collections.sort(tMan);
Collections.sort(sMan);
Collections.sort(sWoman);
Collections.sort(tWoman);
for(int i=0, j=0;i<tMan.size() && j<sWoman.size();) {
int man = tMan.get(i);
int woman = sWoman.get(j);
if(man <= woman) {
i++;
}
else {
couple++;
i++;
j++;
}
}
for(int i=0, j=0;i<sMan.size() && j<tWoman.size();) {
int man = sMan.get(i);
int woman = tWoman.get(j);
if(man >= woman) {
j++;
}
else {
couple++;
i++;
j++;
}
}
System.out.println(couple);
}
}