[알고리즘]section 6-7_교육과정 설계

Yul·2022년 5월 14일
0

Algorithm

목록 보기
7/9

문제

교육과정 설계

현수는 1년 과정의 수업계획을 짜야 합니다.
수업중에는 필수과목이 있습니다. 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있습니다.
만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C, B, A과목이며 이 순서대로 꼭 수업계획을 짜야 합니다.
여기서 순서란 B과목은 C과목을 이수한 후에 들어야 하고, A과목은 C와 B를 이수한 후에 들어야 한다는 것입니다.
현수가 C, B, D, A, G, E로 수업계획을 짜면 제대로 된 설계이지만 C, G, E, A, D, B 순서로 짰다면 잘 못 설계된 수업계획이 됩니다. 수업계획은 그 순서대로 앞에 수업이 이수되면 다음 수업을 시작하다는 것으로 해석합니다.
수업계획서상의 각 과목은 무조건 이수된다고 가정합니다.
필수과목순서가 주어지면 현수가 짠 N개의 수업설계가 잘된 것이면 “YES", 잘못된 것이면 ”NO“를 출력하는 프로그램을 작성하세요.

  • 입력예제
    CBA
    CBDAGE

  • 출력예제
    YES

문제풀이

(선생님 풀이)
1. 큐에 필수과목이 존재하는지 queue.includes()로 체크
2. 해당 요소가 큐의 맨 앞에 존재하는지 아니면 "NO"
3. 모든 코드가 진행된 후에 큐에 요소가 남아있으면 수업에 필수과제가 없는 것임으로 "NO"

코드_내가 푼 코드

function solution(a, b) {
  let queue = []
  let answer = "YES"

  for(let x of a) queue.push(x);
  for(let i = 0; i < b.length; i++) {
    let c = queue[0];

    if(b.includes(c) === true) {
      if(b[i] === c) {
        queue.shift();
      }
    } else {
      if(queue.length === 0) answer = "YES";
      else answer = "NO";
    }
  }
  if(queue.length !== 0) answer = "NO";
  return answer;
}

let a="CBA";
let b="CBDAGE";
console.log(solution(a, b));

코드_선생님의 코드

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

노트

답은 같지만 내가 푼 코드는 장황하다.
문자열을 배열로 쪼개는 것은 split()구문으로 처리하고 answer의 값을 YES가 기본값으로 셋팅했으면 NO를 반환해주는 경우만 처리하면 될 것 같다.

출처: https://inf.run/CPjy

profile
자바스크립트 도장깨기👊

0개의 댓글