2022/02/14) 7. 교육과정설계 [자료구조(스택, 큐)]

굥굥이·2022년 2월 14일
0
post-thumbnail

1. 문제

<교육과정 설계>
: 수업중에는 필수과목이 있는데, 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있다. 만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C,B,A과목이며 이 순서대로 꼭 수업계획을 짜야 한다. C,B,D,A,G,E로 수업계획을 짜면 제대로 된 설계다.
수업설계가 잘된 것이면 "YES", 잘못된 것이면 "NO"를 출력하는 프로그램을 작성한다.

2. 해결 방법

  1. 필수 과목 문자열을 배열(split)로 만들어서 includes를 사용할 수 있도록 한다. sisisisi
  2. 설계가 잘못된 경우를 생각해보자. 먼저 x값이 필수과목이여서 queue에에서 shift했는데 x값과 그 값이 다르다면 순서가 잘못된 경우다. 두 번째로 필수과목의 순서는 맞지만, 개수가 맞지 않을 경우가 있을 수도 있다.(queue의 값이 다 사라지지 않는 경우) 이 경우를 생각해서 코드를 짠다.

3. 정답

        <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>

4. 내 코드와 비교 그리고 반성

나는 큐를 이용해서 풀지 않았다. 그리고 처음에 코드짤 때, 총 과목을 배열에 넣은 후 for문을 돌리는데, 필수과목에 속하지 않으면 pop하는 식으로 했었다. 그 후 비교. 근데 이게 문제였다. pop은 해당 값을 빼는 게 아니고 그냥 맨 뒤에 것을 빼는 거였기 때문이다. 그리하여 해당 값을 빼는 함수가 뭔지 생각이 안나서, 다시 코드를 짜서 저런 식으로 풀었다.

        <script>
            function solution(need, plan){
                let answer = "YES";
                let queue = [];
                for(let x of plan){
                    if(x === 'C' || x === 'B' || x === 'A') queue.push(x);
                }
                console.log(queue)
                if(queue.join('') !== 'CBA')  answer='NO';
                return answer;
            }
            let a="CBA";
            let b="CBDAGE";
            console.log(solution(a, b));
        </script>
profile
아자아자 파이띵굥!

0개의 댓글