🏀 문제

 

불합격 😥

풀다가 막혀서 다른사람의 코드를 보고 작성 해보았다.

 

 

 

합격코드

function solution(priorities, location) {
  let answer = 0;
  let count = 0;
  let target_location = location;

  while (priorities.length > 0) {
    let first = priorities.shift();
    if (priorities.filter((e) => e > first).length > 0) {
      priorities.push(first);
    } else {
      count += 1;
      if (target_location === 0) {
        return (answer = count);
      }
    }
    target_location -= 1;
    if (target_location === -1) {
      target_location = priorities.length - 1;
    }
  }

  return answer;
}

// console.log(solution([2, 1, 3, 2], 2));
console.log(solution([1, 1, 9, 1, 1, 1], 0));

먼저 몇번째로 출력되었는지를 알려주는 count , 내가 출력하려는 타겟이 배열의 몇번째 위치에 있는지 알려주는 변수를 선언했다.

while문으로 배열의 길이가 0보다 클때가지 로직을 돌려 주었지만 내 타겟이 출력되면 return으로 while문을 강제 종료시켰다.

 

first라는 변수에 배열의 첫번째 값을 빼서 저장시켜주고 그 값을 기준으로 배열의 filter함수를 돌려 기준값보다 큰 값이 배열에 존재하는지 여부를 판단했다.

만약 배열의 길이가 0보다 크다면 현재 기준 값보다 큰 숫자가 배열에 존재한다는 뜻임으로 우선순위에서 밀려나며 그 값은 다시 배열의 마지막으로 들어간다.

이제 first 보다 큰 값이 없다는 뜻은 현재 기준값을 출력해줘야 한다는 뜻이고 출력과 동시에 count숫자를 올려주고 출력값은 사라진다.

현재 타겟의 위치가 0이라는 것은 내가 출력하려는 값이 가장 앞에 와있고 우선순위에 가장 높다는 뜻임으로 return으로 while문을 종료시켜준다. 

 

if else의 조건문과 별개로 while문이 돌아갈때마다 타겟의 위치는 변해야하며 내가 출력하려는 타겟의 위치가 첫번째를 지나 -1이되면 다시 타겟의 위치를 배열의 가장 마지막으로 보내준다.

 

 

문제를 풀고난후

한글로 코드를 설명하며 정리하려다 보니깐 더 어려운점이 있는것 같다. 

가장 헷갈렸던 부분이 로직을 몇번 돌려야 할지 고민하는 것이 였는데 위에 코드처럼 while문으로 로직을 가장 마지막 발생할수잇는 경우의 수까지 돌린 다음 조건이 맞으면 return문으로 강제 종료시키는 방법도 좋은것 같다.

 

 

📌 문제풀러가기 https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

실패물  (0) 2021.07.23
숫자문자열과 영단어  (0) 2021.07.22
자연수를 뒤집어 배열로 만들기  (0) 2021.07.20

+ Recent posts