📌 03 - 멘토링
A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 한다. M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 문제이다.
주의
가능한 모든 멘토-멘티 순서쌍은 4 * 4 = 16쌍이다.
멘토와 멘티가 짝이 될 수 있는 모든 경우의 수를 구해야한다. 멘토와 멘티가 같은 학생이면 안되지만 검증하는 과정에서 같은 경우는 자연스럽게 제외된다.
다음은 각 테스트에서 멘토(i)와 멘티(j)가 짝이 될 수 있는지 검증을 해야한다.
각 테스트에서 멘토와 멘티의 등수를 비교하여 멘토의 등수가 더 높으면 cnt++을 해준다.
📝 풀이
function solution(test) {
let answer = 0;
m = test.length;
n = test[0].length;
// 모든 경우의 수
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
let cnt = 0;
// (멘토, 멘티) 짝이 될수 있는지 검증
for (let k = 0; k < m; k++) {
let pi = (pj = 0);
for (let s = 0; s < n; s++) {
if (test[k][s] === i) pi = s;
if (test[k][s] === j) pj = s;
}
if (pi < pj) cnt++;
}
if (cnt === m) answer++;
}
}
return answer;
}
let arr = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
console.log(solution(arr));
멘토-멘티 쌍을 (i, j)라고 생각하자.
각 테스트 결과를 돌면서, i와 j의 인덱스 위치를 비교한다음,
i < j라면 cnt++를 하며, (만약 해당 테스트에서 멘토 index< 멘티 index일 시 cnt++)
테스트 loop가 종료될 때 cnt === 시험횟수(m)라면 해당 순서쌍은
모든 테스트에서 멘토가 멘티보다 등수가 앞선다.
따라서 해당 순서쌍은 멘토-멘티가 될 수 있으므로 answer++한다.