[Algorithm] _ 멘토링

이지·2021년 10월 4일
0

algorithm

목록 보기
3/10

문제를 이해하는 게 어려웠다. 배열안의 숫자가 등수가 아니라, 학생을 의미하는 거였군..
for 문 4번.. 효율성 괜찮아요..?

function solution(test){
  //answer는 cnt 3번을 모두 통과해 멘토가 확정된 경우를 의미한다. 
    let answer=0;
  //테스트의 횟수를 의미한다.
    m=test.length;
  //학생의 명수를 의미한다. 
    n=test[0].length;
    for(let i=1; i<=n; i++){
        for(let j=1; j<=n; j++){
          //이부분은 수연님의 아이디어! break를 쓰니 아예 for문이 멈춰버려서, continue를 사용해서 i 와 j 가 같은, 즉 나와 내 자신이 매치되는 경우를 제외한다. 메모리절약에 조금이나마 도움이 되려나?
            if(i===j) continue; 
          
          //cnt 는 짝지어진 i와 j 중에서, j의 수학점수가 더 높은 결과를 얻은 경우를 카운팅한다.             let cnt=0;
            for(let k=0; k<m; k++){
                //먼저, i학생과 j 학생의 등수를 초기세팅한다. 
              	let pi=pj=0;
                for(let s=0; s<n; s++){
                     // i , j 학생을 찾으면 각각 몇등인지 할당한다. 
                    if(test[k][s]===i) pi=s;
                    if(test[k][s]===j) pj=s;
                }
              // j학생의 등수가 높을 경우에만 카운트를 올린다. 
                if(pi<pj) cnt++;
            }
          // 카운트가 총 테스트 횟수와 일치하면 (모든 테스트에서 더 높은 점수를 얻으면) 
          //멘토링의 경우의 수를 하나 올린다. 
            if(cnt===m) answer++;
        }
    }
  // 여기서, const arr = []; arr.push([i,j])를 하면, 어떤 학생이 멘토링 짝을 이루는지도 알 수 있다. 
  // 요구하는 건 멘토링 경우의 수이므로 answer를 바로 리턴한다. 
    return answer;
}

let arr=[[3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2]];
console.log(solution(arr));
profile
이지피지레몬스퀴지🍋

0개의 댓글

관련 채용 정보