728x90
🎈섹션3. 자료구조 활용 섹션 -(3)
🟦 3-3. 현관문 출입 순서 | 너무 어렵다. . .
- 이 문제는 큐를 2개 사용하여 대기열을 각각 만든다.
- prev 변수로 직전 현관문 사용 상태를 (0 or 1) 저장해두고 참고해야 한다.
- 시간 변수 t 가 하나씩 증가하면서 각 시간 별로 이용 사원을 세팅해야 한다.
완성 코드
package to_0502;
/* 3-3. 현관문 출입 순서 | 진짜 개어렵다. .. */
import java.util.*;
class Solution1 {
//솔루션 함수
public int[] solution(int[] arrival, int[] state){
//들어오는 대기열
Queue<Integer> enter = new LinkedList<>();
//나가는 대기열
Queue<Integer> exit = new LinkedList<>();
int n = arrival.length, prev = 1;
int[] answer = new int[n];
for(int t = 0, i = 0, cnt = 0; ; t++){
if(enter.isEmpty() && exit.isEmpty() && i < n) {
if(t < arrival[i]){
t = arrival[i];
prev = 1;
}
}
while(i < n && arrival[i] <= t) {
if (state[i] == 0) enter.offer(i);
else exit.offer(i);
i++;
}
if(prev == 1) {
if(!exit.isEmpty()) {
answer[exit.poll()] = t;
prev = 1;
}
else{
answer[enter.poll()] = t;
prev = 0;
}
}else if(prev == 0) {
if(!enter.isEmpty()) {
answer[enter.poll()] = t;
prev = 0;
}else{
answer[exit.poll()] = t;
prev = 1;
}
}
cnt++;
if(cnt == n) break;
}
return answer;
}
public static void main(String[] args){
Solution1 T = new Solution1();
System.out.println(Arrays.toString(T.solution(new int[]{0, 1, 1, 1, 2, 3, 8, 8}, new int[]{1, 0, 0, 1, 0, 0, 1, 0})));
System.out.println(Arrays.toString(T.solution(new int[]{3, 3, 4, 5, 5, 5}, new int[]{1, 0, 1, 0, 1, 0})));
System.out.println(Arrays.toString(T.solution(new int[]{2, 2, 2, 3, 4, 8, 8, 9, 10, 10}, new int[]{1, 0, 0, 0, 1, 1, 0, 1, 1, 0})));
}
}
728x90
'알고리즘 이론 [개념] > [개념] 코테 알고리즘 공부 - 시즌 2' 카테고리의 다른 글
섹션4. Sorting & Thinking - (1) (0) | 2023.05.22 |
---|---|
섹션3. 자료구조 활용 섹션 -(4) (0) | 2023.05.04 |
섹션3. 자료구조 활용 섹션 -(2) (0) | 2023.05.01 |
섹션3. 자료구조 활용 섹션 - (1) (0) | 2023.04.28 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (4) (0) | 2023.04.27 |