코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 3. 멘토링

sangchu 2023. 1. 24. 10:46

문제

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;
  let cnt = 0;
  const N = test[0].length;

  for (let mentor = 1; mentor <= N; mentor++) {
    for (let menti = 1; menti <= N; menti++) {
      cnt = 0;
      for (let i = 0; i < test.length; i++) {
        if (test[i].indexOf(mentor) < test[i].indexOf(menti)) cnt++;
      }
      if (cnt === test.length) answer++;
    }
  }
  return answer;
}

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

삼중 반복문을 통해 멘토, 멘티를 정하고 각 테스트를 돌며 멘토가 멘티보다 등수가 높은지 비교했다. 멘토가 더 높으면 카운트를 1씩 올리고, 마지막 테스트까지 다 비교해서 카운트가 문제 수와 같으면 멘토가 확정이다. 

 

 

처음에 접근하기 어려웠다. 노트에 끄적여보니까 점점 어떻게 풀어가야할 지 감이 잡혔다. 접근이 안될 때 이 방법을 쓰면 정말 도움이 많이 되는 것 같다.