public class T1 {
public int solution(int n, int m, int[][]arr) {
int answer = 0;
// m이 테스트 횟수, n이 학생 수
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) {
T1 t = new T1();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][]arr = new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.println(t.solution(n, m, arr));
sc.close();
}
}
풀이
1. 2차원 배열[테스트][학생수]을 입력받고
2. solution메서드로 넘긴다.
3. answer에는 멘토가 될수 있는 케이스들이 누적된다.
4. 경우의 수를 따지면
학생수*학생수가 모든 경우의 수이다.
2중 for문을 통해 좌표 개념처럼 (1,1)(1,2)(1,3) 이런 식으로 경우의 수를 따진다.
5. 3번째 for문은 테스트(TEST)를 의미한다.
m번의 테스트에서 앞에 있는 사람의 등수가 뒤에 있는 사람의 등수보다 높아야 한다.
pi, pj 변수를 선언한다. 등수를 저장할 것이다.
6. 4번째 for문은 열의 개수를 의미한다.
Ex)
첫번째 테스트에 앞에 있는 사람을 찾는다.
if(1번테스트, 1번학생의 등수가 == 1(멘토가 될 학생) 일때 pi라는 변수에 1번학생의 등수를 저장한다.
if(1번테스트, 2번학생의 등수가 == 2(멘티가 될 학생) 일때 pj라는 변수에 2번학생의 등수를 저장한다.
정확히 말하자면 등수를 저장하는게 아니라 위치(순서)를 저장하는 것이다.
(1,2)
1번학생이 2번학생의 등수 보다 작아야(순위는 작아야 높다)
테스트 케이스를 통과한 것이다. cnt를 증가시키고
3번째 반복문을 통과하면
cnt의 개수가 테스트 수와 같다면 멘토 멘티가 성립되는 케이스인 것이다.
'코딩테스트 문제풀이' 카테고리의 다른 글
백준 2869번 - 달팽이는 올라가고 싶다 (0) | 2022.06.10 |
---|---|
임시반장 정하기 (0) | 2022.04.04 |
봉우리 (0) | 2022.04.04 |
격자판 최대합 (0) | 2022.04.04 |
등수구하기 (0) | 2022.04.04 |