λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ν”„λ‘œκ·Έλž˜λ° 곡뢀/μ½”ν…Œ

[μΈν”„λŸ°] Queue, Stack μ˜€λ‹΅ν’€μ΄

Ex043

8. 응급싀
 

μ„€λͺ…

메디컬 병원 μ‘κΈ‰μ‹€μ—λŠ” μ˜μ‚¬κ°€ ν•œ λͺ…밖에 μ—†μŠ΅λ‹ˆλ‹€.

응급싀은 ν™˜μžκ°€ λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ μ§„λ£Œλ₯Ό ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μœ„ν—˜λ„κ°€ 높은 ν™˜μžλŠ” 빨리 μ‘κΈ‰μ‘°μΉ˜λ₯Ό μ˜μ‚¬κ°€ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이런 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 응급싀은 λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ ν™˜μžμ˜ μ§„λ£Œμˆœμ„œλ₯Ό μ •ν•©λ‹ˆλ‹€.

• ν™˜μžκ°€ μ ‘μˆ˜ν•œ μˆœμ„œλŒ€λ‘œμ˜ λͺ©λ‘μ—μ„œ 제일 μ•žμ— μžˆλŠ” ν™˜μžλͺ©λ‘μ„ κΊΌλƒ…λ‹ˆλ‹€.

• λ‚˜λ¨Έμ§€ λŒ€κΈ° λͺ©λ‘μ—μ„œ κΊΌλ‚Έ ν™˜μž 보닀 μœ„ν—˜λ„κ°€ 높은 ν™˜μžκ°€ μ‘΄μž¬ν•˜λ©΄ λŒ€κΈ°λͺ©λ‘ 제일 λ’€λ‘œ λ‹€μ‹œ λ„£μŠ΅λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ§„λ£Œλ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

즉 λŒ€κΈ°λͺ©λ‘μ— 자기 보닀 μœ„ν—˜λ„κ°€ 높은 ν™˜μžκ°€ 없을 λ•Œ μžμ‹ μ΄ μ§„λ£Œλ₯Ό λ°›λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

ν˜„μž¬ 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.LinkedList;
import java.util.Queue;
import java.util.Scanner;

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

public class Ex043 {
	
	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) { //μš°μ„ μˆœμœ„ 높은 ν™˜μž λ°œκ²¬μ‹œ break
					Q.offer(tmp);
					tmp = null;
					break;
				}
			}
			if(tmp!=null) { //μš°μ„ μˆœμœ„ κ°€μž₯ 높을 λ•Œ
				answer++;
				if(tmp.id==m) return answer;
			}
		}
		
		return answer;
		
		
		//내풀이(X) > 6 0 60 60 60 90 60 60 60 μΌλ•Œ 닡은 5
		//μžμ‹ λ³΄λ‹€ 큰 μˆ˜κ±°λ‚˜, κ°™μœΌλ©΄μ„œ μžκΈ°λ³΄λ‹€ μ•žμ— μžˆλŠ” 수
//		int answer = 1;
//		Queue<Integer> Q = new LinkedList<>();
//		int max = arr[m];
//		for(int x : arr) {
//			Q.offer(x);
//		}
//		
//		for(int i=0; i<m; i++) {
//			if(Q.poll()>=max) {
//				answer++;
//			}
//		}
//		for(int i=m; i<n; i++) {
//			if(Q.poll()>max) {
//				an)swer++;
//			}
//		}
//		
//		return answer;
		
	}
	
	public static void main(String[] args) {
		Ex043 T = new Ex043();
		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));
	}

}