Array(1, 2차원 배열) - 0212. 멘토링
private static int solution(int n, int m, String[][] strArr) {
int answer = 0;
int[][] gradeArr = new int[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
gradeArr[i][Integer.parseInt(strArr[i][j]) - 1] = j + 1;
}
}
for(int i=0; i<n; i++) {
for (int j = 0; j < n; j++) {
answer += isCanBeMento(i, j, gradeArr) ? 1 : 0;
}
}
return answer;
}
private static boolean isCanBeMento(int a, int b, int[][] gradeArr) {
for(int i=0; i<gradeArr.length; i++) {
if(gradeArr[i][a] <= gradeArr[i][b]) return false;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] str = sc.nextLine().split(" ");
int n = Integer.parseInt(str[0]);
int m = Integer.parseInt(str[1]);
String[][] strArr = new String[m][];
for(int i=0; i<m; i++) {
strArr[i] = sc.nextLine().split(" ");
}
System.out.println(solution(n, m, strArr));
}
public int solution(int n, int m, int[][] arr){
int answer=0;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
int cnt=0;
for(int k=0; k<m; k++){
int pi=0, pj=0;
for(int s=0; s<n; s++){
if(arr[k][s]==i) pi=s;
if(arr[k][s]==j) pj=s;
}
if(pi<pj) cnt++;
}
if(cnt==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.print(T.solution(n, m, arr));
}
해당 문제는 2중 for문
을 통해 두 학생이 멘토, 멘티가 될 수 있는 경우의 수를 순회하는 문제이다.
나의 풀이에서는 index
를 해당 학생의 번호로 여기고, 자신의 등수를 보관하도록 재정렬했다.
그 후 반복문을 순회하며 각 테스트의 등수를 비교하며 두 학생이 맺어질 수 있는지 판별하였다.
강의에서는 마찬가지로 반복문을 순회하며 모든 학생이 매칭될 수 있는 경우의 수를 순회한다.
이 때 학생의 번호를 각각 i
, j
로 두고, 등 수 배열에서 자신의 번호가 등장하는 index
를 서로
비교하여 판별하도록 구성했다.