https://school.programmers.co.kr/learn/courses/30/lessons/42587
3개의 배열을 이용해 풀었습니다.
answer는 프린터가 된 순서가 담길 배열입니다.
array는 매개변수로 입력받는 priorities의 배열이 큐로 변환될 배열입니다.
index는 array의 각 숫자들의 원래 인덱스를 저장할 배열입니다.
풀이 코드는 아래와 같은데 코드를 하나씩 풀어보면서 설명해보겠습니다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int[] answer = new int[priorities.length];
Deque<Integer> array = new ArrayDeque<Integer>();
Deque<Integer> index = new ArrayDeque<Integer>();
for(int i = 0; i < priorities.length; i++ ){
array.offer(priorities[i]);
index.offer(i);
}
int sum = 1;
while(array.peek() != null){
int max = Collections.max(array);
if(array.peek() < max){
array.offer(array.poll());
index.offer(index.poll());
}else{
array.poll();
answer[index.poll()] = sum;
sum += 1;
}
}
return answer[location];
}
}
초기값을 array와 index에 넣으면 위와 같습니다.
sum값은 프린터 되는 순서를 세어줄 변수입니다.
max는 array에서 가장 큰 값이 담기게 됩니다.
우선 array 배열의 첫 번째 값과 max값을 비교해서 첫 번째 값이 작을 경우
첫 번째 값을 배열 맨 뒤에 추가하고 인덱스의 첫 번째 값도 맨 뒤에 추가해줍니다.
이것을 반복하다가 array의 가장 큰 값과 만나면 가장 큰 값을 array에서 제거합니다.
그리고 answer의 해당 index에 순서 값인 sum을 넣어 주고 sum을 + 1 해줍니다.
이렇게 반복해서 array의 숫자가 사라질 때까지 반복하면
프린터 순서가 담긴 answer 배열이 생성됩니다.
거기서 location으로 들어온 위치의 값을 반환하면 됩니다.
'Algorithm > Java 풀이' 카테고리의 다른 글
[프로그래머스] 베스트앨범 자바 풀이 (0) | 2022.10.02 |
---|---|
프로그래머스 폰켓몬 java 풀이 (0) | 2022.09.28 |
프로그래머스 같은 숫자는 싫어 자바풀이 (1) | 2022.09.23 |
프로그래머스 K번째 수 Java풀이 (0) | 2022.09.14 |
백준 1008 자바 (0) | 2022.03.11 |