Programmers - 스택/큐 > 프린터

박재현·2021년 7월 10일
0

알고리즘 부수기

목록 보기
7/43
post-thumbnail

내 풀이

  1. index === 0 이면 값을 shift 한다. location위치는 맞춘다.
  2. 나머지 값들과 비교한다.
    3-1. 자신보다 큰 값이 존재할 경우 맨 뒤에 push
    3-2. 자신보다 큰 값이 존재하지 않을 경우 cnt++
  3. location === 0 일 때 3-2인 경우 return
function solution(priorities, location) {
  let priority = undefined;
  let cnt = 0;
  let isBiggest = undefined;

  let prioritiesArr = priorities.map((value, index) => [value, index]);
  while (true) {
    priority = prioritiesArr.shift();
    isBiggest = prioritiesArr.find((value) => priority[0] < value[0]);
    if (isBiggest === undefined) {
      if (priority[1] === location) {
        return ++cnt;
      } else {
        cnt++;
      }
    } else {
      prioritiesArr.push(priority);
    }
  }
}

모범 답안

index와 value 값이 담겨있는 이차원배열이 아닌 객체를 list에 집어넣어 가독성을 높였다.
find대신 some을 사용해 boolean값으로 확인하였다.

논리적인 순서는 내 풀이와 같다.

function solution(priorities, location) {
  var list = priorities.map((t,i)=>({
    my : i === location,
    val : t
  }));
  var count = 0;        
  while(true){
  var cur = list.splice(0,1)[0];        
  if(list.some(t=> t.val > cur.val )){
    list.push(cur);                        
  }
  else{            
    count++;
    if(cur.my) return count;
    }
  }
}

얻어갈 부분

  • array api에 좀 더 익숙해질 필요가 있다.
  • 객체를 사용해보자.
profile
공동의 성장을 추구하는 개발자

0개의 댓글