-
[Javascript] 프로그래머스 프린터알고리즘, 자료구조/프로그래머스 2020. 6. 30. 16:27
문제
https://programmers.co.kr/learn/courses/30/lessons/42587
대기목록 맨 앞에 있는 문서(J)를 대기목록에서 꺼낸다 → 나머지 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록 맨 마지막에 넣는다 → 그렇지 않으면 J를 인쇄한다. 솔루션 함수의 파라미터에는 문서의 중요도가 순서대로 담긴 배열 priorities, 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location가 들어간다.
문제를 풀고 다른 사람들은 어떻게 코들르 작성했나 확인해보니, 높은 우선 순위가 하나라도 있는지 확인해주는 부분에서 some 메소드를 사용한 경우가 많았다. 이를 활용하면 좀 더 짧은 코드를 작성할 수 있었을텐데... 기억해놨다가 나중에 써먹어봐야겠다.
풀이 과정
function solution(priorities, location) { let answer = 0; // priorities 배열의 인덱스를 요소로 갖는 prints 배열 선언 let prints = priorities.map((_, i) => i); // prints 배열에 요소가 있을 동안 탐색 while(prints.length > 0){ // tmp: prints의 맨 앞 요소(=priorities의 인덱스) let tmp = prints.shift(); // priorities 배열 요소 중 priorities[tmp]보다 큰 우선순위가 있다면 for(let i = 0; i < priorities.length; i++){ if(priorities[i] > priorities[tmp]){ // prints 배열 앞에서 빼냈던 tmp를 push로 뒤에 넣는다 prints.push(tmp); break; } } // 만약 prints 배열에서 tmp가 삭제됐다면 if(!prints.includes(tmp)){ // priorities 배열의 tmp 번째 인덱스를 -1로 채워넣고(작은 숫자가 우선순위 낮음) priorities.fill(-1, tmp, tmp + 1); // 삭제된 요소가 있기 때문에 answer에 +1 해준다 answer++; // tmp가 location와 동일할 경우 answer 반환 if(tmp === location){ return answer; } } } }
테스트 케이스
[3, 5, 1, 8, 8, 1] 4 2
[3, 5, 1, 8, 8, 1] 5 6
'알고리즘, 자료구조 > 프로그래머스' 카테고리의 다른 글
[Javascript] 프로그래머스 보석 쇼핑 (0) 2020.07.10 [Javascript] 프로그래머스 큰 수 만들기 (0) 2020.07.03 [Javascript] 프로그래머스 카펫 (0) 2020.06.29 [Javascript] 프로그래머스 H-index (0) 2020.06.26 [Javascript] 프로그래머스 기능 개발 (2) 2020.06.26