-
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 해석
접근 방법
프로세스를 큐에서 꺼낸 후 우선 순위에 따라 실행하며 특정 프로세스의 실행 순서를 찾기
풀이 과정
주어진 프로세스 배열 priorities의 위치를 저장한 배열 locations를 생성해 우선 순위와 해당 프로세스의 위치를 함께 탐색합니다.
2차원 배열을 사용하는 대신 1차원 배열 두 개(priorities, locations)를 사용한 이유는 Math.max를 사용해 우선 순위 탐색을 편하게 하기 위해서입니다.
그 후, priorities를 큐로 사용해 모든 프로세스가 큐에서 빠져나오기 전까지 순회하면 됩니다.
또한 정확한 구현을 위해 priorities에 원소가 한 개 남은 시점에서는 예외 처리를 해줍니다.
(Math.max()에 빈 배열이 들어가면 -Infinity가 되어 대소 비교에 문제가 발생하지 않지만, 큐에 존재하는 프로세스의 우선 순위를 비교한다는 목적에 맞지 않습니다.)
전체 코드
function solution(priorities, location) { const locations = Array(priorities.length) .fill() .map((val, idx) => idx); let ans = 0; while (priorities.length > 1) { const [pri, loc] = [priorities.shift(), locations.shift()]; if (pri < Math.max(...priorities)) { priorities.push(pri); locations.push(loc); } else { ans += 1; if (loc === location) return ans; } } return ans + 1; }회고
- 시간 복잡도를 줄일 수 있더라도 정확한 풀이가 아니라면 정석대로 풀어보는 것이 좋다.
- 처음 풀이할 때는 큐에 원소를 제거, 추가할 때 시간이 많이 소요될 것이라 생각해서 우선 순위 내림차순으로 정렬하는 방식을 생각했다.
- 하지만 생각한 풀이 방법이 정확한 풀이 방법이 아니었을 뿐더러, 배열의 길이 범위가 좁으므로(1 <= n <= 100) 큐를 사용해도 시간이 충분했다.
- 매번 헷갈리는 배열 메서드 : shift(), unshift(), pop(), push()
- shift(): 배열의 첫번째 원소 제거
- unshift(): 배열의 첫번째에 원소 추가
- pop(): 배열의 마지막 원소 제거
- push(): 배열의 마지막에 원소 추가
'Algorithm > JavaScript' 카테고리의 다른 글
[PRO] 프로그래머스 Lv.2 택배상자 (Javascript) (0) 2024.11.21 [PRO] 프로그래머스 Lv.2 소수 찾기 (Javascript) (3) 2024.11.20 [PRO] 프로그래머스 Lv.2 다리를 지나가는 트럭 (Javascript) (1) 2024.11.17 [PRO] 프로그래머스 Lv.2 전화번호 목록 (Javascript) (0) 2024.11.16 [PRO] 프로그래머스 Lv.2 게임 맵 최단 거리 (Javascript) (3) 2024.11.15 - 시간 복잡도를 줄일 수 있더라도 정확한 풀이가 아니라면 정석대로 풀어보는 것이 좋다.