멘토링 (Brute Force)

frenchkebab·2021년 8월 21일
0
post-thumbnail

숫자 범위확인하고 그냥 냅다 돌려보는 연습을 해보자


내 풀이

function solution(test) {
  const M = arr.length;
  const N = arr[0].length;
  let list = [];
  // i : 멘토
  for (let i = 1; i <= N; i++) {
    // j : 멘티
    for (let j = 1; j <= N; j++) {
      if (i === j) continue;
      let flag = true;
      // 각 M번의 시험
      for (let k = 0; k < M; k++) {
        let pi, pj; // i, j의 등수
        // 각 시험에서 N명의 학생들
        for (let l = 0; l < N; l++) {
          if (arr[k][l] === i) pi = l + 1;
          else if (arr[k][l] === j) pj = l + 1;
        }
        if (pi < pj) flag = false;
      }
      // M번의 시험 모두 pi > pj 이면 해당 Case를 count
      for (x of list) {
        if (x === [i, j] || x.reverse() === [i, j]) continue;
      }

      // flag가 true이면 모든 검증을 통과한 것
      if (flag) list.push([i, j]);
    }
  }
  console.log(list);
  answer = list.length;
  return answer;
}

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

해설 풀이

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

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

내 풀이와 다른 점

  • flag 대신 cnt 변수 사용 (flag가 좀 더 직관적인 것 같음)
  • 굳이 list를 만들 필요 없이 answer 카운팅만 했으면 됨
    (나도 answer 카운팅만 했지만 로그를 찍기 위해 list 만들었음)
  • 굳이 (1, 3) vs (3, 1) 을 비교하는 과정을 넣을 필요가 없었음

문제를 풀면서 막혔던 점

  • flag를 만들지 않아서 많이 헤맸다.
    ( pi < pj 면 break를 하게끔 해놔서 break 후 전부 카운팅이 됐었음)
  • 등수가 더 높다는게 등수 숫자가 더 작다는 것인데 이걸 헷갈려서 부등호 방향을 반대로 했었다.
profile
Blockchain Dev Journey

0개의 댓글