티스토리 뷰

알고리즘/코딩테스트 공부

4-3 멘토링

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 11. 28. 07:00

문제

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

풀이

function solution(test) {
  let answer = 0;
  let m = test.length;
  let n = test[0].length;
  let answerArr = [];
  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= n; j++) {
      // console.log(i, j);
      let cnt = 0;
      for (let k = 0; k < m; k++) {
        // m번 실행하므로 몇번 테스트를 보는지 for문 돌림.
        let pi = (pj = 0);
        for (let s = 0; s < n; s++) {
          // n번 실행하므로 학생들끼리 등수를 비교함
          if (test[k][s] === i) {
            // k번째 테스트에서  i번의 학생이 s등일 때 i번의 학생의 등수를 저장함.  멘티/
            pi = s;
          }
          if (test[k][s] === j) {
            // k번째 테스트에서 j 번의 학생이 s 등일때  j번의 학생의 등수를 저장함 . 멘토/
            pj = s;
          }
          //console.log(pi, pj);
        }
        if (pi < pj) {
          // test[k][s] 에서 i학생이 s등일때를 찾고 test[k][s] 에서 j 학생이 s등일 때를 찾아서 비교함
          // 멘티가 멘토보다 항상 등수가 높으므로  i < j 이여야 함
          cnt++;
        }
        //console.log(cnt);
        if (cnt === m) {
          //m번의 테스트동안 cnt 가 m이라면 m회 모두 pi<pj 라는 뜻이기에 answer ++을 해줌
          //console.log(j, i);
          answer++;
        }
      }
    }
  }
  console.log(answerArr);
  return answer;
}

let arr = [
  [3, 4, 1, 2],
  [4, 3, 2, 1],
  [3, 1, 4, 2],
];
console.log(solution(arr));

'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글

5-1 두 배열 합치기  (0) 2021.12.01
4-5 K번째 큰 수  (0) 2021.11.28
4-2 뒤집은 소수  (0) 2021.11.28
4-1 자릿수의 합  (0) 2021.11.28
3-5 문자열 압축  (0) 2021.11.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함