인프런 커뮤니티 질문&답변

skwodhkswkd님의 프로필 이미지
skwodhkswkd

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

7. 교육과정설계(큐)

제 솔루션도 확인해주실수 있나요?

작성

·

227

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요 강의 잘 보고 왔습니다.
저는 이 문제를 큐가 아닌 스택으로 풀었습니다.
강사님의 솔루션과 비교하자면
제 코드는 처음에 reverse() 연산이 한 번 들어가지만
shift() 연산이 모두 pop()으로 변해서 데이터의 크기가 커질수록
더 좋은 성능을 보일 거 같은데 맞나요?
shift()연산이 앞의 원소 하나빼고 뒤에 있는 원소들을 한칸씩 땡기는 개념이라 한 번의 shift()가 O(N)이 걸린다해서 가급적이면 큐를 직접 구현하는 방법이 아니면 스택을 사용할 수 있으면 사용하는게 낫다고 배워서요
 
function solution(requiredSubject, curriculum) {
  let stack = [...requiredSubject.split('').reverse()];
  for (const char of curriculum) {
    if (char === stack[stack.length - 1]) {
      stack.pop();
      if (stack.length === 0) return 'YES';
    }
  }
  return 'NO';
}

답변 2

1

Js에서는 배열로 큐를 쓰는게 어떤건지 잘모르겟지만

일단 shift연산시 다 땡겨오는 개념이라면 작성자님 처럼 만들면 성능향상에 좋겟죠 

하지만 원형큐라면 별상관없겟죠

Js배열이라는게 링크드 리스트로 되잇다면 마찬가지로 별 상관없을겁니다

이런 고민을하고 코드를 짜보는건 매우 좋은 행동이라고 생각합니다

하나배우면 이러케 저러케 만들어보면 실력 쑥쑥 성장하실거에요 멋집니다 파이팅 

 

0

저도 이 고민이 들어서 스택으로 바꿔서 풀어봤는데, 같은 고민을 하신 분이 계셨네요.

저는 이렇게 풀어봤습니다.

function solution(need, plan) {
  let answer = "YES";
  plan = plan.split("").reverse();
  for (let x of need) {
    while (x !== plan[plan.length - 1]) {
      plan.pop();
    }
    if (!plan.length) {
      answer = "NO";
      break;
    }
  }
  return answer;
}

console.log(solution("CBA", "CBDAGE")); // YES
console.log(solution("CBA", "CABA")); // YES
console.log(solution("CBA", "CBBDAGE")); // YES
console.log(solution("CBA", "CBDDAB ")); // YES
console.log(solution("CBA", "CBDAGAE")); // YES
console.log(solution("ABC", "BABC")); // YES

 

split과 reverse에서 시간복잡도가 shift보다 많이나왔을거 같은데요

skwodhkswkd님의 프로필 이미지
skwodhkswkd

작성한 질문수

질문하기