import java.util.*;
class Main {
public int solution(int n,int m, int[][] arr) {
int answer = 0;
int pi = 0, pj = 0, count;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
count = 0;
//i번호 학생과 j번호 학생을 고정시키고
for (int k = 0; k < m; k++) {
//k번 테스트의 i와 j 학생의 등수(s)찾기
for(int s = 0; s < n; s++) {
if(arr[k][s] == i) pi = s;
if(arr[k][s] == j) pj = s;
}
//테스트 k번에서 i의 등수가 j보다 높다면 count++
if(pi < pj) count++;
}
//모든테스트에서 등수가 높다면 answer++;
if(count == m) answer ++;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt(); //학생수
int m = kb.nextInt(); //테스트 개수
int[][] arr = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = kb.nextInt();
}
}
System.out.println(T.solution(n,m,arr));
}
}
4중 for문... 이해하기도 너무 어려웠다.
먼저, i,j로 1,2,3,4번 학생의 번호를 고정시킨다. ex) i = 1, j =3
그 후, 테스트의 갯수(m)만큼 3번째 for문을 돌리고,
등수(s)를 찾기위한 4번째 for문을 돌린다.
만약, arr[k][s] == i와 일치하는 순간이 온다면, k번째 테스트에서
i의 등수는 s이다.
왜냐하면, k번째 테스트에서 i가 s번째로 발견된것이기 때문에...
예시) 테스트가 1개뿐이고(k=1)이고 3 2 1 4 를 돈다고 가정해보면,
arr[0][s] 가 3인순간이 s = 0이기때문에, 3번(i)의 등수는 0등이다.
arr[0][s] 가 1인순간이 s = 2이기 때문에, 1번(i)의 등수는 2등이다.
이런 과정을 거쳐, 테스트m번을 모두 통과해서 count가 만약 테스트 개수(m)과 동일하다면, 즉, 모든 테스트를 순위가 높게 통과했다면, 짝이 한번 이루어진다 (answer ++;).
4중 for문은 1시간동안 머리를 싸매다가 도저히 풀리지 않아서 강의를 봤는데...
강의를 보면서도 이해하기가 조금 어려웠다.
더 연습해서 내껄로 만들자!