[완전 탐색] 멘토링

jinny·2021년 10월 3일

Algorithm

목록 보기
29/34
post-thumbnail

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(arr) {
    let result = 0;

    m = arr.length;
    n = arr[0].length;

    for(let i=1; i<=n; i++) {
        for(let j=1; j<=n; j++) {
            let res = 0;
            for(let k=0; k<m; k++){
                let pi = pj = 0;
                for(let s=0; s<n; s++){
                    if(arr[k][s]===i) pi = s;
                    if(arr[k][s]===j) pj = s;
                }
                if(pi<pj) res++;
            }
            if(res===m) {
                result ++;
            }
        }
    }

    return result;
}
let arr = [[3,4,1,2], [4,3,2,1],[3,1,4,2]];
console.log(solution(arr));  // 3
  • 4중 for문이 돌아야 한다.

  • i와 j는 멘토, 멘티의 짝을 의미 => 총 16개의 짝이 나옴 (조건에 맞춰 걸러야 함)

  • k와 s는 배열을 돌면서 멘토, 멘티 짝이 되는지 확인하고 멘토의 등수가 앞섰다면 res++을 해주어 테스트 결과의 수와 같은지 확인


i와 j가 1일 때, arr에서 i와 j를 찾아 pi,pj에 index를 넣어준다.
arr[0]에서부터 pi,pj가 2로 같기 때문에 res가 3이 될 수 없어 경우의 수 포함 X

(i = 3, j = 1)일 때 pi = 0,1,0 / pj = 2,3,2이기 때문에 res가 3이 되어 경우의 수에 포함된다.
(3,2), (4,2)도 마찬가지로 res가 3이기 때문에 경우의 수 포함

profile
주니어 개발자의 기록

0개의 댓글