[문제풀이] 02-12. 멘토링

𝒄𝒉𝒂𝒏𝒎𝒊𝒏·2023년 10월 28일
0

인프런, 자바(Java) 알고리즘 문제풀이

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를 서로
비교하여 판별하도록 구성했다.

profile
𝑶𝒏𝒆 𝒅𝒂𝒚 𝒐𝒓 𝒅𝒂𝒚 𝒐𝒏𝒆.

0개의 댓글