프로그래머스 : 프린터
https://programmers.co.kr/learn/courses/30/lessons/42587
문제풀이
이번 문제는 프린터라는 문제입니다.
중요도가 높은 순서대로 프린팅을 진행하면서도 내가 원하는 파일의 순서를 알아야 하기 때문에,
인덱스(순서)를 중요도와 함께 묶어 해결하는 솔루션 함수를 짜시면 됩니다.
코드
function solution(priorities, location) {
let check = 0, cnt = 1;
// check는 중요도가 가장 높은 파일을 판별할 때 사용
// cnt는 인쇄 순서
let hashMap = priorities.map((elem, index) => [elem, index]);
// 대기목록의 우선도와 인덱스를 함께 배열로 묶어 배열 형태로 저장
// [우선도, 인덱스]
while(hashMap.length > 0){
// 대기목록이 존재할 때 까지 반복
const tmp = hashMap[0];
// 대기목록 첫번째 파일
for(let i=1; i<hashMap.length; i++){
if(hashMap[i][0] > tmp[0]){
// 만약 대기열의 다른 파일 중 첫번째 파일보다 중요도가 높은 것이 있다면
hashMap = hashMap.slice(1, hashMap.length);
hashMap.push(tmp);
// 맨 뒤로 이동
check = 0;
break;
}
check = 1;
// 첫번째 파일이 대기열 파일들 중 가장 중요도가 높았을때 check를 1로함
}
if(check === 1){
if(tmp[1] === location) return cnt;
// 첫번째 파일이 내가 원하는 파일이라면 카운트 수를 반환
cnt ++;
hashMap = hashMap.slice(1, hashMap.length);
// 원하는 파일이 아니면 인쇄(배열에서 삭제) 후 카운트 +1
}
}
}
리뷰
저는 조금 직관적으로 프린트를 진행하여 대기열에서 제외하듯 구현을 했습니다만, 다른 방법으로도 풀 수 있을 것 같습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[1차] 뉴스 클러스터링 / js 풀이 (0) | 2021.08.31 |
---|---|
괄호 변환 / js 풀이 (0) | 2021.08.28 |
튜플 / js 풀이 (0) | 2021.08.02 |
네트워크 / js 풀이 (0) | 2021.07.26 |
오픈채팅방 / js 풀이 (0) | 2021.07.26 |