강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của skwodhkswkd1612
skwodhkswkd1612

câu hỏi đã được viết

Giới thiệu về giải quyết vấn đề thuật toán JavaScript (chuẩn bị cho bài kiểm tra mã hóa)

7. Thiết kế chương trình giảng dạy (Q)

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

Viết

·

290

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';
}
코테 준비 같이 해요! javascript

Câu trả lời 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보다 많이나왔을거 같은데요

Hình ảnh hồ sơ của skwodhkswkd1612
skwodhkswkd1612

câu hỏi đã được viết

Đặt câu hỏi