Lecture5_8

11132 ワード

// 각 환자에 대한 객체를 만들기 위함
class Person {

    // 처음 받은 차트상에서의 번호
    int id;
    // 위험도
    int priority;

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

}

// 강의 내용
public class Lecture5_8 {

    public static 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()) {
            // 현재 차례의 환자를 tmp에 넣기
            Person tmp = Q.poll();
            // 현재 환자와 남은 환자 비교하기 위한 반목문
            for (Person x : Q) {
                // 현재 차례의 환자보다 차트상의 환자 중 위험도가 높은 환자가 존재한다면
                if (x.priority > tmp.priority) {
                    // 현재 환자를 다시 맨 뒤의 순서로 보낸다
                    Q.offer(tmp);
                    // tmp 초기화
                    tmp = null;
                    // 반복문 종료
                    break;
                }
            }
            // 만약 현재 환자가 가장 높은 위험도라면
            if (tmp != null) {
                // 진료를 본 후 보내고 answer++ 한다
                answer++;
                // 방금 진료를 본 환자의 번호가 m이라면 그 때의 answer를 리턴한다
                if (tmp.id == m) return answer;
            }
        }

        // 0 <= m < n의 조건이 맞지 않다면 아래의 결과값은 m이다
        return answer;
    }

    public static void main(String[] args) {

        // 값 입력
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int m = kb.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = kb.nextInt();
        }

        // 출력
        System.out.println(solution(n, m, arr));
    }

}