회원들의 번호와 들 수 있는 무게는 배열에 저장한다.
isBest라는 boolean 배열을 선언하고 true로 초기화해준다.
회원 간의 친분 관계는 인접리스트를 통해 저장한다.
각 회원마다 반복문을 돌면서 친분이 있는 회원과의 역기 무게를 비교하는데, 작거나 같으면 isBest 배열에서 그 회원의 인덱스에 해당하는 값을 false로 바꿔준다.
그리고 마지막에 true인 회원들만 카운트 해주면 된다.
import java.io.*;
import java.util.*;
public class Main {
static int n, m;
static int[] weight;
static boolean[] isBest;
static ArrayList<ArrayList<Integer>> relation = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
weight = new int[n];
isBest = new boolean[n];
Arrays.fill(isBest, true);
for(int i = 0; i < n; i++) {
relation.add(new ArrayList<>());
}
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
weight[i] = Integer.parseInt(st.nextToken());
}
for(int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken()) - 1;
int to = Integer.parseInt(st.nextToken()) - 1;
relation.get(from).add(to);
relation.get(to).add(from);
}
for(int i = 0; i < n; i++){
func(i);
}
int count = 0;
for(int i = 0; i < n; i++){
if(isBest[i]){
count++;
}
}
System.out.println(count);
}
public static void func(int p){
if(!isBest[p]){
return;
}
for(int i = 0; i < relation.get(p).size(); i++) {
if(weight[p] <= weight[relation.get(p).get(i)]){
isBest[p] = false;
return;
}
}
}
}
2단계는 난이도가 너무 낮은거 같아서 3단계를 골라서 풀었는데 생각보다 너무 쉽게 풀렸다. 다른 3단계에 비해 굉장히 쉬운거 같기도하고, 더 좋은 코드가 있을 거 같아서 다음에 다시 한번 풀어보거나 다른 사람의 풀이를 찾아봐야겠다.