JS 알고리즘 문제풀이/섹션 6. 자료구조(스택, 큐)

7.교육과정설계(큐)

crab. 2022. 6. 28. 10:55
반응형

📌강의 정리

큐를 이용해서 두 개의 문자열을 비교하며 하나의 문자열이 제대로 규칙에 맞게 작성되었는지

확인하는 문제이다.

첫번째 문자열의 순서가 두번째 문자열에 그대로 있어야하며(문제에서는 선수과목으로 표현함)

첫번째 문자열에 있는게 두번째 문자열에 없어도 안된다.

이 문제는 첫번째 문자열을 split을 이용해 배열로 바꾼후

두번째 문자열을 하나씩 반복하여 우선 두번째 문자열의 문자가 첫번째에 있는지 확인하고

있다면 첫번째와 비교하여 첫번째의 문자열의 첫번째 문자와 같으면

첫번째 문자열에서 그걸 shift해주고 아니라면 바로 return해준다.

 

📌느낀점

문제를 살짝 어렵게 풀었던게 주어진 필수과목이 반드시 계획에 포함된다는 것을 캐치하지 못했다.

그래서 포함되지 않았을 경우도 포함하여 알고리즘을 짜느라 조금 복잡하게 푼 것 같다.

또한 split을 잘 사용했어야 했는데 하나하나 다 넣어줬다.. 다시 알고리즘을 잘해봐야겠다.

(다시 보니까 강사님도 필수과목 못 챙겼을때를 체크할 수 있게 짜셨네.. 알고리즘을 잘 생각해야겠다.)

 

//나의코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(need, plan) {
        let answer = "YES";
        let queue_p = [];
        let queue_n = [];
        for (let x of plan) queue_p.push(x);
        for (let y of need) queue_n.push(y);
        while (queue_p.length) {
          if (queue_p.shift() == queue_n[0]) {
            queue_n.shift();
          }
        }
        if (queue_n.length !== 0) answer = "NO";
        return answer;
      }

      //반복문과 큐를 사용해서 b를 하나씩 쉬프트한다.
      //a의[0]이 그 원소일때 a를 쉬프트해준다.
      //b의 반복이 끝났을때 a의 길이를 측정해서 yes, no를 판별한다.
      let a = "CBA";
      let b = "CBDAGE";
      console.log(solution(a, b));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(need, plan) {
        let answer = "YES";
        let queue = need.split("");
        for (let x of plan) {
          if (queue.includes(x)) {
            if (x !== queue.shift()) return "NO";
          }
        }
        if (queue.length > 0) return "NO";
        return answer;
      }

      let a = "CBA";
      let b = "CBDAGE";
      console.log(solution(a, b));
    </script>
  </body>
</html>
반응형