섹션3. 자료구조 활용 섹션 -(3)

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