[JavaScript/section 4] 03 - 멘토링

수민·2023년 1월 19일
0

알고리즘

목록 보기
17/22

📌 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));

Solution

멘토-멘티 쌍을 (i, j)라고 생각하자.

각 테스트 결과를 돌면서, i와 j의 인덱스 위치를 비교한다음,
i < j라면 cnt++를 하며, (만약 해당 테스트에서 멘토 index< 멘티 index일 시 cnt++)
테스트 loop가 종료될 때 cnt === 시험횟수(m)라면 해당 순서쌍은
모든 테스트에서 멘토가 멘티보다 등수가 앞선다.
따라서 해당 순서쌍은 멘토-멘티가 될 수 있으므로 answer++한다.

profile
헬창목표

0개의 댓글