728x90
인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 간략한 문제 설명, 풀이 코드를 정리하고 있습니다.
- 문제 링크 : https://cote.inflearn.com/contest/10/problem/02-12
- 문제 설명 : m번의 수학 시험에서의 학생 n명 각각의 등수가 주어졌을 때 멘토 멘티 짝이 되는 경우의 수를 출력
- 멘토 조건 : 멘티보다 모든 시험의 등수가 앞서야한다.
풀이
- 4중 for문을 사용하여, 멘토 멘티가 되는 모든 경우의 수를 돌며 모든 시험에서 멘토가 등수가 높은 경우의 수를 카운트한다.
package inflearn.array;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//멘토링
public class Main2_12 {
public static 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++) { //멘티
if (i == j) continue;
int count = 0;
int mentor = 0; int mentee = 0; //멘토 멘티의 등수
for (int k = 0; k < m; k++) { //k번째 시험
for (int s = 0; s < n; s++) { //등수
if (arr[k][s] == i) mentor = s;
if (arr[k][s] == j) mentee = s;
}
if (mentor < mentee){ //멘토가 등수가 더 높으면
count++;
}
}
if (count == m) { //멘토가 모든 시험에서 앞서면
answer++;
}
}
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); //학생 수
int m = Integer.parseInt(st.nextToken()); //시험 수
int[][] arr = new int[m][n];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; st.hasMoreTokens(); j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
System.out.println(solution(n, m, arr));
}
}
댓글