ezhoon

[인프런] 05-08 응급실 본문

[Java] 인프런 문제풀이/Stack, Queue (자료구조)

[인프런] 05-08 응급실

ezhoon 2022. 2. 1. 16:31

📖  문제


  • 첫 줄에 자연수 N(5<=N<=100)과 M(0<=M<N) 주어집니다.위험도는 값이 높을 수록 더 위험하다는 뜻입니다.
  • 같은 값의 위험도가 존재할 수 있습니다.
  • 두 번째 줄에 접수한 순서대로 환자의 위험도(50<=위험도<=100)가 주어집니다.
    • 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼냅니다.
    • 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로 다시 넣습니다. 그렇지 않으면 진료를 받습니다.

출력 예시

 

⚠️  주의사항


  • 같은 환자 위험도의 환자일 경우도 생각해야 한다.

 

✍️  이해


/**
 * 1. 인원수 n 목표가되는 사람 m 위험도 배열 arr
 * 2. 순번과 위험도가 같이 있는게 편할 것 같으므로 queue를 순선,위험도로 입력
 * 3. 임시로 Q.poll() 꺼내서 진료가 가능한지 확인하기
 *  3-1. 모든 인원 위험도 비교 후 만약 진료가 불가능한경우 다시 Q에 offer 후 break
 *  3-2. 진료가 가능한 경우 answer++ 후 return
 */

 

✏️  풀이


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

class Person{
    int id;
    int priority;
    public Person(int id, int priority){
        this.id=id;
        this.priority=priority;
    }
}

class Main {
    public int solution(int n, int m, int[] arr){
        int answer = 0;
        Queue<Person> Q = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            Q.offer(new Person(i, arr[i]));
        }
        while(!Q.isEmpty()){
            Person tmp = Q.poll();
            for (Person x : Q) {
                if (x.priority > tmp.priority) {
                    Q.offer(tmp);
                    tmp = null;
                    break;
                }
            }
            if(tmp!=null){
                answer++;
                if (tmp.id == m) {
                    return answer;
                }
            }
        }
        return answer;
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        System.out.println(T.solution(N, M, arr));
    }
}

 

Comments