멘토링

bkboy·2022년 5월 17일
0

문제

현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니
다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의
수학공부를 도와주는 것입니다.
선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다.
만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서
모두 B학생보다 등수가 앞서야 합니다.
M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지
출력하는 프로그램을 작성하세요.

제한사항

입출력 예

풀이

function solution(test) {
  let answer = 0;
  let m = test.length; // 시험본 횟수
  let n = test[0].length; // 학생 수
  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= n; j++) {
      // 학생의 경우를 따지기 위한 반복문 
      let count = 0;
      for (let k = 0; k < m; k++) {
        // i의 등수, j의 등수를 넣어 줄 변수
        let pi = (pj = 0);
        for (let s = 0; s < n; s++) {
          // 시험결과(2차원 배열)을 탐색하기 위한 반복문
          // 배열의 요소와 i(학생)값이 같으면 그때 s는 i의 등수가 된다.
          if (arr[k][s] === i) pi = s;
          if (arr[k][s] === j) pj = s;
        }
        if (pi < pj) count++; // 등수가 더 낮으면, 즉 높으면
      }
      if (count === m) answer++; // 모든 시험에서 등수가 높아야하니까.
      
    }
  }

  return answer;
}

let arr = [
  [3, 4, 1, 2],
  [4, 3, 2, 1],
  [3, 1, 4, 2],
];
console.log(solution(arr));
  • 반복문의 역할을 잘 생각해야한다. i,j는 학생이고 k,s는 시험결과 이차원 배열을 탐색하는 용도이다.
  • 전형적인 브루트포스 문제이다.
profile
음악하는 개발자

0개의 댓글