멘토링 (완전탐색, 브루트포스)

daybyday·2021년 3월 9일
0

Brute-force Search
말 그대로 단순무식하게 모든 경우의 수를 탐색한다는 의미이다.
정답을 완벽하게 추출할 수 있지만, 시간복잡도가 엄청나게 커질 수 있다.

문제

멘토, 멘티 정하기

입력 예

[[3,4,1,2],[4,3,2,1],[3,1,4,2]]

출력 예
3

풀이

const solution = arr => {
    let answer = 0;
    let m = arr.length;
    let n = arr[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 (arr[k][s] === i) pi = s;
                    if (arr[k][s] === j) pj = s;
                }
                if (pi < pj) cnt++;
            }
            if (cnt === m) answer++;
        }
    }
    return answer;
}

i, j는 멘토, 멘티가 될 학생의 조합
k, s는 멘토, 멘티가 될 학생의 등수
멘토 등수 < 멘티 등수이면 cnt++
m번의 테스트에서 모두 멘토 등수 < 멘티 등수이면 answer++

어떻게 for문을 돌려야할 지 감을 잡을 수 없었던 문제...
(멘토, 멘티)가 될 수 있는 조합을 for문으로 돌리고 그 조합 안에서 또 등수를 찾아 비교하는 for문을 돌려야 하는 문제

0개의 댓글