하도 막혀서 어떻게든 복잡하게라도 풀어내고 빨리 다른사람 풀이를 보고 싶었던 문제..
결국 스택과 큐는 사용하지 않았다.
문서의 인덱스와 문서를 조건에 따라 재배치하고 문서의 인덱스를 저장하는 배열에 따로 최종본을 저장하고
그 배열에서 조회할 문서를 다시 찾아온다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
List<Integer> docIdx = new ArrayList<>();
List<Integer> doc = new ArrayList<>();
List<Integer> reIdxDoc = new ArrayList<>();
for (int i = 0; i < priorities.length; i++) {
int priority = priorities[i];
doc.add(priority);
docIdx.add(i);
}
while(!doc.isEmpty()) {
int nowPrior = doc.get(0);
int nowIdx = docIdx.get(0);
boolean isDelay = false;
for (Object nextPrior : doc) {
if ((int)nextPrior > nowPrior) {
isDelay = true;
break;
}
}
if (isDelay) {
doc.add(nowPrior);
docIdx.add(nowIdx);
} else {
reIdxDoc.add(nowIdx);
}
doc.remove(0);
docIdx.remove(0);
}
for (int i = 0; i < reIdxDoc.size(); i++) {
if(reIdxDoc.get(i) == location) {
answer = i+1;
}
}
return answer;
}
}
+ 가장 많은 좋아요를 받은 사람의 풀이
천천히 뜯어봐야겠음.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int l = location;
Queue<Integer> que = new LinkedList<Integer>();
for(int i : priorities){
que.add(i);
}
Arrays.sort(priorities);
int size = priorities.length-1;
while(!que.isEmpty()){
Integer i = que.poll();
if(i == priorities[size - answer]){
answer++;
l--;
if(l <0)
break;
}else{
que.add(i);
l--;
if(l<0)
l=que.size()-1;
}
}
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습,
https://programmers.co.kr/learn/challenges
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (정렬) H-Index (0) | 2021.03.25 |
---|---|
[프로그래머스] (정렬) 가장 큰 수 (0) | 2021.03.25 |
[프로그래머스] (스택/큐) 기능개발 (0) | 2021.03.23 |
[프로그래머스] (스택/큐) 주식가격 (0) | 2021.03.22 |
[프로그래머스] (정렬) K번째 수 (0) | 2021.03.22 |
댓글