<교육과정 설계>
: 수업중에는 필수과목이 있는데, 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있다. 만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C,B,A과목이며 이 순서대로 꼭 수업계획을 짜야 한다. C,B,D,A,G,E로 수업계획을 짜면 제대로 된 설계다.
수업설계가 잘된 것이면 "YES", 잘못된 것이면 "NO"를 출력하는 프로그램을 작성한다.
- 필수 과목 문자열을 배열(split)로 만들어서 includes를 사용할 수 있도록 한다. sisisisi
- 설계가 잘못된 경우를 생각해보자. 먼저 x값이 필수과목이여서 queue에에서 shift했는데 x값과 그 값이 다르다면 순서가 잘못된 경우다. 두 번째로 필수과목의 순서는 맞지만, 개수가 맞지 않을 경우가 있을 수도 있다.(queue의 값이 다 사라지지 않는 경우) 이 경우를 생각해서 코드를 짠다.
<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>
나는 큐를 이용해서 풀지 않았다. 그리고 처음에 코드짤 때, 총 과목을 배열에 넣은 후 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>