티스토리 뷰
프로세스 순서:
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다.
처음엔 처음 작업할 문서를 꺼내서 나머지 문서의 중요도와 비교한 뒤 꺼낸 문서의 중요도가 대기 문서 중 한 문서라도 중요도가 밀리면 두 문서를 서로의 위치에 교환하는 작업으로 오해했다.
그렇게 생각하면 중요도가 높은 문서의 위치를 기억하고 있다가 작업 마지막에 맨 앞 문서와 바꿔줘야 했기 때문에 단순 queue로 문제를 푼다고 가정하면 작업이 매우 복잡해지고, 어려워진다.
그래서 실제로 굉장히 오랜시간 삽질하다가 LinkedList는 인덱스의 위치별로 값을 반환받을 수 있으니 결국 List를 만들어 문제를 풀었다.
풀고나서 2번 ,3번의 실패 이후에 문제를 제대로 파악했다....하하...이래서 문제를 꼼꼼히 읽는게 가장 중요하다.
본질은 맨 앞 문서보다 중요도가 높은 문서가 나오면 맨 앞 문서를 맨 뒤로 보낸 뒤 작업을 반복하는 것.
이렇게 생각하면 전자보다 100배는 쉽게 문제에 접근할 수 있으며, 굳이 Index번호를 저장하지 않아도 된다.
(하지만 나는 이미 만들어 놓은 틀을 고치기가 귀찮아서 LinkedList를 그대로 사용했다.)
문제는 자신이 출력을 원하는 문서의 위치를 location 변수에 같이 주어, location에 위치한 문서가 언제 출력이 될 수 있는 지를 묻고 있기 때문에 문서의 중요도와 해당 문서의 원본 인덱스를 정수 배열들을 가지고 있는 List를 생성하여 문제를 풀었다.
Code:
package com.choonham;
import java.util.Arrays;
import java.util.LinkedList;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int[] out = new int[priorities.length];
int j = 0;
LinkedList<int[]> que = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
int[] temp = {priorities[i], i };
que.add(temp);
}
boolean toggle = false;
while(true) {
if(que.isEmpty()) break;
for(int i = 0; i < que.size(); i++) {
if(que.getFirst()[0] < que.get(i)[0]) {
que.addLast(que.removeFirst());
toggle = true;
break;
} else {
toggle = false;
}
}
if(toggle == false) {
out[j] = que.removeFirst()[1];
j++;
}
}
for(int i = 0; i < out.length; i++) {
if(out[i] == location) {
answer = i+1;
break;
}
}
return answer;
}
}
위와 같이 out배열을 따로 구성하여 마지막 부분에 원하는 문서가 언제 출력되는 지 구하는 for문을 한번 더 구현했다.
이 코드가 그다지 효율적이지 않은 코드인 건 잘 알고 있지만, 이미 2시간 가량 삽질을 한 뒤라 좀 더 깔끔하게 수정할 시간이 없다...그래도 정답을 띄웠으니, 그냥그냥 만족하는걸로..ㅎㅎ
물론, 효율은 박살났다.
오늘의 교훈: 문제는 항상 꼼꼼하게 읽자...
'[JAVA] > Programmers' 카테고리의 다른 글
[JAVA] Programmers <실력 체크 LV1> (0) | 2021.03.31 |
---|---|
[JAVA] Programmers <Heap_LV2> 더 맵게 (0) | 2021.03.30 |
[JAVA] Programmers <Queue_LV2> 기능 개발 (0) | 2021.03.26 |
[JAVA] Programmers <Stack_LV2> 주식 가격 (0) | 2021.03.25 |
[JAVA] Programmers <Queue_LV2> 다리를 지나는 트럭 (0) | 2021.03.25 |
- redux
- 인천 구월동 맛집
- Async
- react-native
- react
- Promise
- await
- 맛집
- 이탈리안 레스토랑
- 정보보안기사 #실기 #정리
- 인천 구월동 이탈리안 맛집
- redux-thunk
- 파니노구스토
- javascript
- AsyncStorage
- Total
- Today
- Yesterday