🗃️javascript/코테 프레임 문제

멘토링(4-3)브루트 포스는 각 경우마다 조건을 바로 달아서 구하는것.

하얀성 2024. 6. 17. 11:53

본인 계획 :

 

브루트포스 알고리즘대로

일단 pivot으로 test[0]의 모든 2인1조의 경우를 만들고 다른 test[1], test[2]...까지 각 비교해주면서 기존 pivot과 역전된 요소가 있다면 pivot[0]의 그 요소를 제거해주려했다.

 

그런데 test[1]...부터 끝까지 만들고서 비교할 메소드를 만들지 못했다.

function solution(test) {
  let pivotArr = [];

 
  for (let i = 0; i < pivot.length - 1; i++) {
    for (let j = i + 1; j < pivot.length; j++) {
      pivotArr.push([pivot[i], pivot[j]]);
    }
  }
 

  for (let i = 0; i < pivot.length - 1; i++) {
    for (let j = i + 1; j < pivot.length; j++) {}
  }

  return pivotArr;
}

let arr = [
  [3, 4, 1, 2],
  [4, 3, 2, 1],
  [3, 1, 4, 2],
];
console.log(solution(arr));

 


검토.

 

위의 코드는 브루트포스 방식으로 모든 가능한 2인 1조의 경우를 비교하여 역전된 요소를 제거하는 방식입니다. 주어진 문제는 그와는 다른 조건을 가진 문제로, 각 학생이 다른 학생보다 모든 테스트에서 높은 점수를 받아야 멘토와 멘티가 될 수 있습니다. 따라서, 문제를 해결하기 위해서는 다른 접근 방법이 필요합니다.

 

(허..)


<답안>

우선 아래의 비교조건을 통해 멘토 순위가 높은 경우임이 판단될경우, 횟수를 추가해서 강화하도록 했음.

나처럼 일일이 다 구해서 비교하기 보단, 각 경우에 맞는 조건을 계속 달아서 쓸 수 있도록 했음.

function solution(N, M, testResults) {
  let count = 0;

  for (let i = 1; i <= N; i++) { // 멘토 후보
    for (let j = 1; j <= N; j++) { // 멘티 후보
      if (i === j) continue; // 같은 학생은 멘토와 멘티가 될 수 없음
      let mentorIsAlwaysHigher = true;
      for (let k = 0; k < M; k++) { // 각 테스트에 대해
        let mentorRank = testResults[k].indexOf(i);
        let menteeRank = testResults[k].indexOf(j);
        if (mentorRank > menteeRank) { // 멘토의 순위가 멘티보다 낮다면
          mentorIsAlwaysHigher = false;
          break;
        }
      }
      if (mentorIsAlwaysHigher) {
        count++;
      }
    }
  }

  return count;
}

// 입력 예제
let N = 4;
let M = 3;
let testResults = [
  [3, 4, 1, 2],
  [4, 3, 2, 1],
  [3, 1, 4, 2]
];

console.log(solution(N, M, testResults)); // 출력: 3