프린터 (스택/큐)
설명 : 프로그래머스
간단 설명 : 회사에서 프린터를 개발하였는데, 중요도가 높은 문서들을 먼저 인쇄하는 프린터를 개발했다.
- 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
- 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
- 그렇지 않으면 J를 인쇄합니다.
이와 같은 방식으로 수행되며 priorities에 각 프린트에 우선순위가 정해져 있있다. 나의 프린트물은 location(0부터 시작)에 있으며 몇번째에 프린트가 될까? 리턴하는 문제이다.
번호 | priorities | location | return |
---|---|---|---|
1 | [2, 1, 3, 2] | 2 | 1 |
2 | [1, 1, 9, 1, 1, 1] | 0 | 5 |
입출력 설명
- 나의 프린트물은 2(3번째)이다. 우선순위는 3이다. 그래서 제일 첫번째(1)로 프린트된다.
- 나의 프린트물은 0(1번째)이다. 우선순위는 1이다. 그래서 5번째에 프린트된다.
수도코드
프린트갯수선언
나의 프린트 선언
priorities 배열을 한바퀴 루프를 돌아야함
문제 설명에 보듯이 제일 앞의 벨류의 우선순위보다 높은것이 있다면 뒤로 보냄
그렇지 않으면 프린트하고 만약에 그 프린트가 되면 차례(location)가 줄어드는데 0이 되면 print횟수를 리턴하면 답이된다.
코드
function solution(priorities, location) {
let printCount = 0;
let myDoc = location;
while (priorities.length > 0) {
let firstDoc = priorities.shift();//앞에서 제거
let prior = priorities.filter((e) => e > firstDoc);
if (prior.length > 0) {//만약에 우선순위가 제거된 거보다 큰것이 없다면 뒤로 다시 푸쉬하고 넣음
priorities.push(firstDoc);
} else {
//만약에 우선순위가 제거된 거보다 큰것이 있다면 프린트해버리고 프린트 숫자가 늘면 차례가 줄어든다. 그렇기 때문에 myDoc 즉 location이 0이라면 그 printCount를 리턴하면 답이된다.
printCount++;
if (myDoc === 0) {
return printCount;
}
}
myDoc--;// 차례는 우선순위를 따질때 마다 줄어든다.
if (myDoc === -1) { //만약에 차례가 0을 지나 마이너스가 된다면 뒤로 간것이기 때문에 다음과 같이 처리를 해준다
myDoc = priorities.length - 1;
}
}
}
회고 : 계속 필터, 맵등 메소드의 중요성을 꺠달고 있다. 기초를 좀더 단단하게 쌓아야 겠다.
Author And Source
이 문제에 관하여(프린터 (스택/큐)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@godkor200/프린터-스택큐저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)