문제 : 교육과정 설계
문제 설명
현수는 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“를 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 줄에 한 줄에 필수과목의 순서가 주어집니다. 모든 과목은 영문 대문자입니다.
두 번 째 줄부터 현수가 짠 수업설계가 주어집니다.(수업설계의 길이는 30이하이다)
▣ 출력설명
수업설계가 잘된 것이면 “YES", 잘못된 것이면 ”NO“를 출력합니다.
▣ 입력예제 1
CBA
CBDAGE
▣ 출력예제 1
YES
내코드
function solution(need, plan) {
let answer = "YES";
let answerArr = [];
let checkIndex = 0;
// 필수과목 0번째 부터 수업계획 과목과 비교해서 동일한 경우 정답 배열에 저장하고 필수과목의 순서를 의미하는 인덱스 1 증가
// 최종적으로 정답 배열에 담긴 내용과 필수과목순서와 동일한지 확인
for (const subject of plan) {
if (subject === need[checkIndex]) {
answerArr.push(subject);
checkIndex++;
}
}
if (answerArr.join("") !== need) answer = "NO";
return answer;
}
var a = "CBA";
var b = "CBDAGE";
console.log(a, b, solution(a, b)); // YES
a = "CBA";
b = "CDAGBE";
console.log(a, b, solution(a, b)); // NO
풀이
- 수업계획 과목배열을 순회하면서 필수과목 첫번째 부터 수업계획 과목과 비교해서 동일한 경우 정답 배열에 저장하고 필수과목의 순서를 의미하는 checkIndex 를 1 증가
- 최종적으로 정답 배열에 담긴 내용과 필수과목 순서와 동일한지 확인 후 YES or NO 를 반환
다른 해결 방법
// que 로 처리하는 방식
function solution(need, plan) {
let answer = "YES";
let queue = need.split("");
// 수업계획의 과목수 만큼 순회
for (let x of plan) {
// queue 에 과목 x 가 있다면 queue 배열의 0번째 과목과 수업계획 과목 x 와 같지않은 경우 필수과목의 순서가 잘못됨을 의미
if (queue.includes(x)) {
if (x !== queue.shift()) return "NO";
}
}
// 수업 계획에 필수과목이 없는 경우
if (queue.length > 0) return "NO";
return answer;
}
풀이
- 수업계획의 과목수 만큼 순회하면서 필수과목 문자열을 배열 queue 로 변경 후 includes 메서드를 통해 현재 수업계획의 과목 x 가 존재하는지 확인 후 존재하는 경우 queue 배열의 첫번째 과목을 shift 하여 꺼낸 값과 x와 동일하지 않는 경우에는 필수과목의 순서가 잘못됨을 의미 하므로 "NO" 를 반환
- 위 검증 과정이 모두 마친 후 queue 배열의 길이가 0 보다 큰 즉 모든 필수과목 순서가 반영되지 않은 것을 의미하므로 "NO " 를 반환
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : 버블정렬 (0) | 2024.01.08 |
---|---|
[JS] 코딩 테스트 문제 : 선택 정렬 (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 공주 구하기 [큐] (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 쇠막대기 [스택] (0) | 2024.01.06 |
[JS] 코딩 테스트 문제 : 후위식 연산(postfix) [스택] (0) | 2024.01.04 |