코딩 테스트(JAVA)/인프런 문제풀이

응급실

Lea Hwang 2022. 3. 16. 23:07

설명

메디컬 병원 응급실에는 의사가 한 명밖에 없습니다.

응급실은 환자가 도착한 순서대로 진료를 합니다. 하지만 위험도가 높은 환자는 빨리 응급조치를 의사가 해야 합니다.

이런 문제를 보완하기 위해 응급실은 다음과 같은 방법으로 환자의 진료순서를 정합니다.

  • 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼냅니다.
  • 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로 다시 넣습니다. 그렇지 않으면 진료를 받습니다.

즉 대기목록에 자기 보다 위험도가 높은 환자가 없을 때 자신이 진료를 받는 구조입니다.

현재 N명의 환자가 대기목록에 있습니다.

N명의 대기목록 순서의 환자 위험도가 주어지면, 대기목록상의 M번째 환자는 몇 번째로 진료를 받는지 출력하는 프로그램을 작성하세요.

대기목록상의 M번째는 대기목록의 제일 처음 환자를 0번째로 간주하여 표현한 것입니다.

 

입력

첫 줄에 자연수 N(5<=N<=100)과 M(0<=M<N) 주어집니다.

두 번째 줄에 접수한 순서대로 환자의 위험도(50<=위험도<=100)가 주어집니다.

위험도는 값이 높을 수록 더 위험하다는 뜻입니다. 같은 값의 위험도가 존재할 수 있습니다.

 

출력

M번째 환자의 몇 번째로 진료받는지 출력하세요.

 

예시 입력 1

5 2
60 50 70 80 90

예시 출력 1

3

예시 입력 2

6 3
70 60 90 60 60 60

예시 출력 2

4

 

문제 이해

 

수도 코드 및 정답코드

import java.util.*;

class Person{
	int id;
	int red;
	
	// 매개변수가 있는 생성자
	public Person(int id, int red) {
		this.id = id;
		this.red = red;
	}
}
public class Emergency {
	public int solution(int n, int m, int[] emArr) {
		int answer = 0;
		// 큐 생성
		// 큐에 객체를 넣음, 선 작업 : 위에 class Person통해 객체 생성
		Queue<Person> Q = new LinkedList<>();
		// **Q에 하나씩 정보 넣음**!!
		for(int i=0; i<n; i++) {
			Q.offer(new Person(i, emArr[i]));
		}
		// poll해서 red비교함
		while(!Q.isEmpty()) {
			// **poll한 것을 tmp, Q돌면서 x의 red랑 비교!!**, 타입이 Person
			Person tmp = Q.poll(); // 비교대상
			
			// Q에서 하나씩 꺼냄, 타입 Person
			for(Person x : Q) {
				if(x.red > tmp.red) {
					Q.offer(tmp);
					// **이제 새로 비교 해야하므로 tmp 초기화!!**
					tmp = null;
					// 뒤로 offer하면 if문 더 돌 필요없으므로 break
					break;
				 	}
				}
			// 초기화가 되지 않았다는건 tmp.red가 x.red보다 크다니까 offer안 하고 뽑음 = answer ++
			if(tmp != null) {
				answer ++;
				// 내가 찾는 m과 id가 같으면 return 
				if(tmp.id == m) {
					return answer;
				}
			}
		}
		
		return answer;
	}
	
	public static void main(String[] args) {
		Emergency T = new Emergency();
		Scanner kb = new Scanner(System.in);
		// 입력 3개 받음
		int n = kb.nextInt();
		int m = kb.nextInt();
		// n만큼 배열로 받음
		// 배열을 생성
		int[] emArr = new int[n];
		// for문 돌면서 n만큼 위험도 넣기
		for(int i=0; i<n; i++) {
			emArr[i] = kb.nextInt();
		}
		System.out.println(T.solution(n, m, emArr));

	}

}

 

 

'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글

씨름 선수  (0) 2022.03.24
좌표 정렬  (0) 2022.03.24
교육과정 설계  (0) 2022.03.16
공주 구하기  (0) 2022.03.16
쇠막대기  (0) 2022.03.16