🕊 Link

Lv2. 프린터 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42587

🧑🏻‍💻 Code(javascript)

function solution(prior, location) {
  const list = prior.map((num, idx) => ({
    flag: idx === location,
    value: num,
  }));
  let count = 0;
  while (true) {
    let pickedItem = list.shift();
    if (list.some((item) => item.value > pickedItem.value)) {
      list.push(pickedItem);
    } else {
      count++;
      if (pickedItem.flag) return count;
    }
  }
}

💡 Solution

function solution(prior, location) {
  // flag에 내가 인쇄를 요청한 문서인지 아닌지를 담은 Boolean 값을 할당.
  const list = prior.map((num, idx) => ({
    flag: idx === location,
    value: num,
  }));
  let count = 0;
  while (true) {
    // list에서 맨 앞 요소를 꺼냄
    let pickedItem = list.shift();
    // some을 통해서 현재 꺼낸 아이템보다 우선순위가 높은(큰) 숫자가 있는지 확인
    if (list.some((item) => item.value > pickedItem.value)) {
      // 있다면 리스트의 맨 뒤에 다시 push
      list.push(pickedItem);
    } else {
      // 없다면, 프린트 count를 올리고
      // 내가 인쇄를 요청한 문서일 경우 return
      count++;
      if (pickedItem.flag) return count;
    }
  }
}

👨🏻‍💻💭 Self Feedback

flag를 넣을지 말지 한참을 고민했는데,
공간복잡도를 내어주고 시간복잡도를 취하는 데에 너무 많은 고민을 하지 않기.
some의 활용도가 높았던 문제.


  • 2021.04.19 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글