[JS알고리즘] 멘토링



선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다.

만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다. M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요.

첫 번째 줄에 반 학생 수 N(1<=N<=20)과 M(1<=M<=10)이 주어진다. 두 번째 줄부터 M개의 줄에 걸쳐 수학테스트 결과가 학생번호로 주어진다. 학생번호가 제일 앞에서부터 1등, 2등, …N등 순으로 표현된다. 만약 한 줄에 N=4이고, 테스트 결과가 3 4 1 2로 입력되었다면 3번 학생이 1등, 4번 학생이 2등, 1번 학생이 3등, 2번 학생이 4등을 의미합니다.


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

전형적인 브루트포스 문제라고 한다.

브루트포스라는 단어를 처음들어봤다…

브루트 포스란 brute(무식한) force(힘)이고, 완전탐색 알고리즘, 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져오는 알고리즘이라고 할 수 있다.

이 알고리즘의 강력한 점은 예외없이 100%의 확률로 정답만을 출력한다는 것이다.



inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora