[프로그래머스] 기능개발

이아현·2023년 9월 8일
0

코딩테스트

목록 보기
30/31
post-thumbnail

🐣 Intro

알고리즘 문제를 꾸준하게 푸는게 정말 너무 어렵다ㅜㅜ 알고리즘이 약하다보니 계속 피하게 되는데 오늘부터는 진짜 멱살잡고서라도 한 문제씩 꼭 풀어나가야지!!

오늘 푼 문제는 기능개발 문제로 "QUEUE"를 이용해서 푸는 문제였다. 자바스크립트에서는 shift()를 이용해 큐 문제를 풀 수 있다!

👩🏻‍💻 풀이 코드

function solution(priorities, location) {
  var answer = 0;
  var arr = [];
  var max_val = Math.max(...priorities);

  // 위치 값이 저장된 arr 배열 만들어주기
  for (let i = 0; i < priorities.length; i++) {
    arr.push(i);
  }

  // location의 위치에 맞는 프로세스의 순서 찾기 위한 while문
  while (priorities.length > 0) {
    // priorities의 값이 shift()로 없어지기 때문에 max_val은 계속 갱신
    max_val = Math.max(...priorities);

    // 비교했을 때 최대값보다 작으면 큐이기 때문에 shift()하고 push()해서 이동
    if (priorities[0] < max_val) {
      priorities.push(priorities.shift());
      arr.push(arr.shift());
      // 크면 순서가 되었다는 뜻이므로 answer에 + 1해주고 해당값을 priorities에서 shift()
    } else {
      answer += 1;
      priorities.shift();
      if (arr.shift() === location) {
        return answer;
      }
    }
  }

  return answer;
}

console.log(solution([1, 1, 9, 1, 1, 1], 0));
  • 손으로 30분 정도 풀어봤는데 어떻게 풀어야할지 감이 안와서 다른 velog를 참고해서 풀었다.
  • 찾아보니 priorities와 위치 정보를 저장하는 arr이렇게 두 개의 배열을 가지고 문제를 푸는 사람도 있었고, prioritiesarr을 하나의 객체로 저장해서 푸는 사람도 있었다.
    • 나는 전자의 방법을 선택해서 푼 개발자의 코드를 따라 풀었다 :)

⭕ 풀이 방법

  1. 위치 값을 저장하는 배열 arr생성
  2. priorities의 최대값 max_val 생성
  3. max_valpriorities의 원소 비교
    • priorities의 원소 < max_val : priorities의 원소값과 위치값을 shift()해서 다시 push()
    • else : answer++해주고 priorities의 원소값은 shift()로 없애주기
      • 내가 찾고자하는 위치(location)인지 확인 같으면 return
  4. 최대값은 계속 갱신해줘야한다!

🤣 후기

  • 문제와는 별개로 요즘 알고리즘 문제를 푸는게 쉽지가 않다ㅜㅜ 꾸준하게 풀어서 다시 정상궤도에 올라갈 수 있도록 해야지!!

참고 : 프로그래머스 자바스크립트 프로세스 문제 풀이

profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글