JS 알고리즘 문제풀이/섹션 7. 정렬과 그리디, 결정알고리즘

12.마구간 정하기(결정알고리즘)

crab. 2022. 7. 11. 07:53

📌강의 정리

이분탐색을 하는 것은 두 말 사이의 거리이다.

말들을 탐색하는 것이 아니다.

따라서 mid값은 1+9/2 → 5이고 ep라는 변수를 따로 만들어서

제일 가까운 두 말의 거리가 5일때 그리고 3일때 이런식으로 해서 최대거리를 구한다.

 

📌느낀점

쓰면서도 내가 제대로 이해한건가 싶다… 결정알고리즘은 한번으로 끝날 알고리즘이 아닌 것 같다.

우선 앞으로 나올 알고리즘들은 각 테마가 있고 그 테마들의 대표격인 문제들을 외워서 응용하든지 해야겠다.

마치 옛날에 수학풀때 매우 어려운 심화과정 문제들을 푸는 느낌이다.

이제부터는 전략을 다시 짤 필요가 있다.

아직 내 수준에서는 이제부터 나올 문제들을 완벽하게 풀어낼 수 없다.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function count(stable, dist) {
        let cnt = 1;
        return cnt;
      }
      function solution(c, stable) {
        let answer;
        let lt = 0;
        let rt = stable.length;
        stable.sort((a, b) => a - b);
        console.log(stable);
        for (let i = 0; i < stable.length; i++) {
          count(stable, 3);
        }
        return answer;
      }
      // 1 2 4 8 9
      // 처음에 오름차순 sort하고
      // 최대거리가 나올수 있게 그걸 이분 탐색한다.
      // 계속 반복할때 최대값이 하나 업데이트 되는 함수를
      // 만드는게 핵심이다.
      // while(lt > rt),
      // 양쪽 끝은 무조건 말이 하나씩 있다.
      let arr = [1, 2, 8, 4, 9];
      console.log(solution(3, arr));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function count(stable, dist) {
        let cnt = 1,
          ep = stable[0];
        for (let i = 1; i < stable.length; i++) {
          if (stable[i] - ep >= dist) {
            cnt++;
            ep = stable[i];
          }
        }
        return cnt;
      }
      function solution(c, stable) {
        let answer;
        stable.sort((a, b) => a - b);
        let lt = 1;
        let rt = stable[stable.length - 1];
        while (lt <= rt) {
          let mid = parseInt((lt + rt) / 2);
          if (count(stable, mid) >= c) {
            answer = mid;
            lt = mid + 1;
          } else rt = mid - 1;
        }
        return answer;
      }

      let arr = [1, 2, 8, 4, 9];
      console.log(solution(3, arr));
    </script>
  </body>
</html>

'JS 알고리즘 문제풀이 > 섹션 7. 정렬과 그리디, 결정알고리즘' 카테고리의 다른 글

11.뮤직비디오(결정알고리즘)  (0) 2022.07.09
10.이분검색  (0) 2022.07.08
9.결혼식  (0) 2022.07.07
8.회의실 배정  (0) 2022.07.06
7.좌표 정렬  (0) 2022.07.05