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문을 돌려야 하는 문제