728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript
코드
function solution(priorities, location) {
let max;
let count = 0;
while(true) {
max = Math.max(...priorities); //우선순위가 제일 높은 수 저장
let first = priorities.shift(); //우선순위 배열의 제일 앞 요소를 빼내기
if (first !== max) priorities.push(first); //제일 앞 요소가 max값이 아니면 push를 통해 우선순위 배열의 제일 마지막으로 보내기
else { //제일 앞 요소가 max값이면
count++; //내가 찾는게 몇 번째로 출력되는지 반환하기 위해 +1씩 해주기
if (location === 0) return count; //위의 과정을 반복하다가 내가 찾는 것이 제일 앞 요소가 되었을때, 계속 +1 해오던 count 반환
}
location--; //내가 찾는 요소가 제일 앞 요소가 될 때까지 location 줄여나가기
if (location === -1) location = priorities.length - 1; //location을 줄여나가다가 idx가 0보다 작아지게 되면 배열의 가장 끝 idx로 보내기
}
}
후기
- 우선 이 문제는 처음에 제시된 배열의 순서를 지켜야 하기 때문에 정렬을 해서는 안된다. 어떻게 순서를 유지하며 max값을 찾고, 내가 원하는 요소의 위치를 찾을 수 있을까 고민하다가 스택/큐 문제답게 자바스크립트에서 제공하는 shift(), push() 함수를 적절하게 사용하면 나름 쉽게 풀 수 있는 문제였다
- 이 문제를 통해 알게된 건 자바스크립트의 배열 내 최대값, 최소값 찾는 법으로 Math.min(), Math.max() 함수를 사용한다는 것이다
- 사용법 : Math.max.apply(null, 배열이름) or Math.max(...배열이름) >> 두가지 방법으로 사용가능하다
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 약수의 합 / JavaScript (0) | 2022.02.01 |
---|---|
[Programmers] H-Index / JavaScript (0) | 2022.01.26 |
[Programmers] 구명보트 / JavaScript (0) | 2022.01.25 |
[Programmers] 최솟값 만들기 / JavaScript (0) | 2022.01.20 |
[Programmers] 문자열 다루기 기본 / JavaScript (0) | 2022.01.20 |