반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 백준
- 오블완
- 티스토리챌린지
- 10기
- 해결
- 소프티어
- 14942
- MySQL
- 싸피
- 프로그래머스
- softeer
- 설명
- 퍼즐 조각 채우기
- 24955
- 배열 돌리기 5
- 수료
- 후기
- PCCP
- 정기 코딩 인증평가
- 등산코스 정하기
- 142085
- 숫자 이어 붙이기
- java
- 카카오코드 본선
- 카카오
- SQL
- 인턴십
- 핵심
- 산 모양 타일링
- SSAFY
Archives
- Today
- Total
개발 쥬스
[프로그래머스/Java] 42587 프로세스 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
고찰 과정
문제를 봤을 때 단순하게 우선순위 큐를 활용하는 방법도 있겠지만 추가적인 확인 작업도 필요했기에 deque를 활용하여 문제를 해결했습니다.
예를 들어서 프로세스 [A, B, C, D, E, F]가 존재하고 우선순위가 [1, 1, 9, 1, 1, 1]이 있을 때 A의 순서 번호를 구한다고 가정해봅시다.
당연히 C가 먼저 실행되지만 그 다음 실행되어야 하는 순서는 A, B, D, E, F 순이 아닌 C가 실행한 이후의 실행 순서를 마무리 한 후인 D, E, F, A, B 순으로 실행이 되어야 하므로 이를 deque를 활용하면 다음과 같은 순서로 A의 순번을 도출할 수 있습니다.
- priorities 배열에서 특정 우선순위가 몇 번 나왔는지 저장하는 배열 priorityInfos를 만들고 정보를 저장한다.
- priorityInfos 배열을 꺼내어 deque에 담는다.
- 다음과 같은 순서로 A의 순서를 도출한다.
a. deque에서 맨 앞(왼쪽)의 우선순위 정보를 꺼낸다.
b. priorityInfos를 활용하여 이 우선순위 보다 큰 우선순위가 존재하는지 확인한다. 존재한다면 deque의 맨 마지막(오른쪽)에 다시 넣어주고 최고 우선순위라면 순번을 카운트 해주고 priorityInfos에서 해당 우선순위의 존재 개수에서 하나 빼준다.
위의 과정들을 코드로 작성하면 됩니다.
코드
import java.util.*;
class Process {
private final int index;
private final int priority;
public Process(int index, int priority) {
this.index = index;
this.priority = priority;
}
public int getIndex() {
return index;
}
public int getPriority() {
return priority;
}
}
class Solution {
private static final int MAX_VALUE = 10;
public int solution(int[] priorities, int location) {
int answer = 0;
int pLen = priorities.length;
int[] priorityInfos = new int[MAX_VALUE];
for (int priority : priorities) {
++priorityInfos[priority];
}
Deque<Process> deque = new ArrayDeque<>();
for (int i = 0; i < pLen; ++i) {
deque.addLast(new Process(i, priorities[i]));
}
while (!deque.isEmpty()) {
Process process = deque.pollFirst();
int curIdx = process.getIndex();
int curPriority = process.getPriority();
if (existMorePriority(curPriority, priorityInfos)) {
deque.offerLast(new Process(curIdx, curPriority));
continue;
}
++answer;
if (curIdx == location) {
break;
}
--priorityInfos[curPriority];
}
return answer;
}
private boolean existMorePriority(final int priority, final int[] priorityInfos) {
for (int curP = priority + 1; curP < MAX_VALUE; ++curP) {
if (priorityInfos[curP] > 0) {
return true;
}
}
return false;
}
}반응형
'알고리즘' 카테고리의 다른 글
| [백준/Java] 4358 생태학 (0) | 2024.08.08 |
|---|---|
| [백준/Java] 1189번 컴백홈 (0) | 2024.08.08 |
| [백준/Java] 1374번 강의실 (0) | 2024.08.05 |
| [백준/Java] 1034번 램프 (0) | 2024.08.03 |
| [백준/Java] 1027번 고층 건물 (0) | 2024.08.03 |