728x90
반응형
문제 설명
1. 프린트 뽑는 순서와 중요도가 정해져 있다.
2. 프린트를 순서대로 가져오는데, 현재 뽑을 예정인 순서의 프린트보다 중요도가 높은 것이 있으면 현재 순서의 프린트를 맨 뒤로 보내준다.
3. 중요도는 1~9로 존재하며 숫자가 클수록 중요하다.
4. location에 해당하는 프린트가 몇 번째로 뽑히는지 찾아 return하면 된다.
풀이 과정
1. queue에 넣어두고 하나씩 빼서 비교해 준다.
2. queue내에 현재 peek값보다 큰 중요도를 갖는 것이 있으면 현재 peek를 빼서 다시 넣으면 최후미로 이동할 것이다.
3. 해당 process를 계속 진행하면서 프린트가 뽑힐 때 마다 location을 하나씩 빼면서 진행해 주고, location이 0이고, 현재 값이 출력된 경우가 답이 된다.
4. 만약 location은 0이라면 현재 위치가 구해야 하는 위치인데, 이것이 다시 맨 뒤로 이동하는 경우, 진행해야 하는 process를 구해서 더해 준다.
5. 전체 process의 진행동안 answer을 1씩 추가하여, 마지막 location이 출력되는 경우가 정답이 된다.
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
class Solution { | |
public int solution(int[] priorities, int location) { | |
int answer = 0; | |
// 프린트는 First in, First out 방식을 사용하기 때문에 queue를 활용한다. | |
Queue<Integer> waiting = new LinkedList<>(); | |
// 먼저 queue waitng에 순서대로 값을 넣어준다. | |
for(int i=0; i<priorities.length; i++) | |
waiting.offer(priorities[i]); | |
// 모든 기다리는 print가 완료되기 전까지 코드를 수행한다. | |
while(!waiting.isEmpty()) | |
{ | |
// 더 중요한 프린트가 있을 경우 ture, 아닌 경우 false. | |
boolean importance = false; | |
// queue의 모든 값들과 현재 peek값을 비교하여 중요도가 높은 것이 있는 경우 ture로 설정한다. | |
for(int i : waiting) | |
{ | |
if(i>waiting.peek()) | |
importance = true; | |
} | |
// 현재 값이 최우선이 아닌 경우 | |
if(importance) | |
{ | |
// 현재 값을 rear로 보낸 후, 삭제한다. | |
waiting.offer(waiting.peek()); | |
waiting.remove(); | |
// 그리고 현재 존재하는 위치가 알고 싶은 프린트 번호라면, 맨 뒤로 가기 때문에 현재 queue의 크기만큼 앞에 수행해야 할 작업이 존재한다. | |
if(location==0) | |
location += waiting.size(); | |
} | |
// 현재 값이 최우선인 경우. | |
else | |
{ | |
// 값을 빼내 준다. | |
waiting.poll(); | |
// 그리고 그 값이 빠진 만큼 작업이 행해지기 때문에 answer을 더해준다. | |
answer++; | |
// 만약 지금 나간 값이 원하는 작업의 위치라면 while문을 나가면 된다. | |
if(location == 0) | |
break; | |
} | |
// 매 작업이 행해질 때 마다 location의 위치는 한 칸씩 peek로 이동하게 된다. | |
location--; | |
} | |
return answer; | |
} | |
} |
반응형
'알고리즘 공부' 카테고리의 다른 글
[백준 1700번] 멀티탭 스케줄링 - java (0) | 2021.05.09 |
---|---|
[백준 1062번] 가르침 - java (0) | 2021.05.09 |
[프로그래머스] 체육복 - java (0) | 2021.05.02 |
[프로그래머스] 모의고사 - java (0) | 2021.05.02 |
[백준 1987번] 알파벳 - java (0) | 2021.05.02 |