* 응급실 (class생성) *

Seungmin Lim·2022년 2월 13일
0

코딩문제연습

목록 보기
48/63

문제

나의풀이 (풀지못함)

import java.util.*;
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) {
		Main T = new Main();
		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(T.solution(n,m,arr));
	}
	
}

풀이방법

Person에 id와 priority를 인스턴스 변수로 선언하고,
Person을 데이터타입으로 갖는 Queue에 id값과 우선순위를 넣었다.
만약, poll한 값보다 우선순위가 더 높은 값이 Queue에 존재하면,
그 값은 다시 Queue에 넣는다.
그리고 현재값은 null로 지정해준다.

만약, 현재값이 null이 아닌채로 for문이 끝난다면,
현재값이 가장 우선순위가 높은것이기 때문에,
진료가 가능하다는 뜻이고, 1명의 환자가 나간다.(answer++)

이 과정을 거치면서 만약 m번째 환자가 나간다면, 그때의 answer가 m번째 환자의 진료순서가 된다.

핵심키워드

클래스를 생성해서 인스턴스 변수로 두개의 값을 다루는것은 익숙치않아서 어려웠다. 많이 공부하자!

0개의 댓글