[Java] 프린터 - Lv2 프로그래머스 스택/큐코딩테스트/프로그래머스2023. 3. 14. 20:44
Table of Contents
728x90
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42587#
풀이
첫 접근은 큐를 활용하여 먼저 들어온 녀석이 다음 값보다 작을 경우 뺏다가 후순위로 보내어 풀면 되겠다.
라고 생각하여 접근했지만 뺀 값들을 어떻게 활용할 지 번뜩이는 아이디어가 없어서 일단 그냥 풀어봤다.
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int length = priorities.length;
int idx = 0;
List<int[]> pri = new ArrayList<>();
int[] ans = new int[length];
for(int i : priorities) {
pri.add(new int[] {i, idx});
idx ++;
}
for(int i=0; i<length; i++) {
int num = 1;
while(num < length) {
if(pri.get(i)[0] < pri.get(num)[0] && i < num) {
pri.add(pri.get(i));
pri.remove(i);
num = 1;
}
else num++;
}
}
for(int i=0; i<length; i++) {
if(pri.get(i)[1] == location) {
answer = i+1;
}
}
if(answer == -1) {
answer = length-1;
}
return answer;
}
}
정답이래서 어안이벙벙
큐 활용
사실 큐를 활용해서 여러 코드들을 작성해봤고
우선순위 큐까지 사용해서 이래저래 시도해보았다. 문제의 배열 변수명도 priorities니까
근데 도저히 조건을 주지 못해서 방황했고 결국 컬렉션으로 풀었었는데, 아래 코드를 보니 한 1300대 맞은 느낌
class Solution2 {
public int solution(int[] priorities, int location) {
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
int answer = 0;
for(int i: priorities) {
pq.add(i);
}
while (!pq.isEmpty()) {
for (int i = 0; i < priorities.length; i++) {
if (priorities[i] == pq.peek()) {
if (i == location) {
answer++;
return answer;
}
pq.poll();
answer++;
}
}
}
return -1;
}
}
우선순위 큐를 내림차순으로 선언하고
큐가 텅텅 빌때까지 돌리는 것 까진 OK.. 큐를 사용해서 문제 풀었을 때도 그렇게 풀었다
위의 코드가 조건을 너무 매끄럽게 단순하게 잘 준것같아서 가져왔다.
proirities배열의 idx값을 받아와서 location이랑 바로 비교 할 생각을 왜 못했는지 모르겠다..
코드출처
https://easybrother0103.tistory.com/112
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!