Queue_class정의해서 순서 알아내기
✅ 병원에 환자가 진료를 볼 순서를 구하세요
환자가 도착한 순서대로 진료를 한다.
단, 위험도가 높은 환자는 먼저 진료를 받는다.
- 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼낸다
- 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로 다시 넣는다. 그렇지 않으면 진료를 받는다.
- 즉 대기목록에 자기 보다 위험도가 높은 환자가 없을 때 자신이 진료를 받는 구조
현재 N명의 환자가 대기 목록에 있을 때, M번째 환자는 몇 번째로 진료를 받는지 구하세요
M번째 환자는 대기목록의 제일 처음 환자를 0으로 간주하여 표현한 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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[] input){
int answer= 0;
Queue<Person> queue= new LinkedList<>();
for(int i=0; i<n; i++) queue.offer(new Person(i, input[i]));
while(!queue.isEmpty()){
Person tmp= queue.poll();
for(Person p: queue) {
if (tmp.priority < p.priority) {
queue.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 sc= new Scanner(System.in);
int n= sc.nextInt();
int m= sc.nextInt();
int[] input= new int[n];
for(int i=0; i<n; i++){
input[i]= sc.nextInt();
}
System.out.print(T.solution(n, m, input));
}
}
//⭐️input:
5 2
60 50 70 80 90
//⭐️output:
3
//⭐️input:
6 3
70 60 90 60 60 60
//⭐️output:
4
Person
이라는class
를 정의한다.- 그리고 만든
queue
는Person
의 아이디와 우선순위를 저장할 것이다. queue
가 비어있지 않을 때queue
에서 가장 첫 번째 사람을 뽑고queue.poll();
- 그 다음 queue를 돌면서 나머지 사람이랑 우선순위를 비교한다.
- (경우1) 만약 첫 번째 사람이 우선순위가 높다면 그 사람이 그냥 진료 받음
- 그리고
answer++;
- (경우2) 만약 첫 번째 사람보다 우선 순위가 높은 사람이 뒤에 있으면
- 첫 번째 사람은 맨 뒤로 간다.
- 그리고 뽑은 사람은 다시 초기화
null
- 만약 첫 번째 사람보다 우선 순위가 높은 사람이 한 사람이라도 있으면 있는 거니까 그만 찾음.
break;
- 그리고 계속
poll()
을 시키다가,poll
한 사람의 아이디가 우리가 찾는 아이디 m과 일치하면 출력
🔵 ThingsILearned
✔️ 필요할 경우, 내가 원하는 class를 정의해서 사용할 수 있다.
This post is licensed under CC BY 4.0 by the author.