[코테5_8]응급실 문제

byeol·2022년 12월 19일
0

코딩테스트

목록 보기
36/42

✔️내 답 -> 정답
근데 강의 조금 듣고 힌트 얻어서 풀었다.
여기서 중요한 것은 외부 클래스 Person을 만든 것인데
문제에서 주어진 처음 예시는 Person에 대한 필요성이 없지만
두번째 예시에서는 중복값이 존재하기 때문에 Person이라는 클래스가 필요하다.

import java.util.*;

public class Main{
 public static int solution(int n, int m, int[] arr){
   int answer=0;
   Person target = new Person(m,arr[m]);
   Queue<Person> q = new LinkedList<>();
   for(int i=0;i<n;i++) {
	   q.add(new Person(i,arr[i]));
   }
     
   while(q.size()>0) {
   if(q.peek().getId()!=target.getId()) {
	   boolean remove = turn(q,q.size()); 
	   if(remove==true) {
		   q.poll().getValue();
		   answer++;
	   }
	   else {
		   q.add(q.poll());
	   }
   } else {
	   boolean remove = turn(q,q.size()); 
	   if(remove==true) {
		   q.poll().getValue();
		   answer++;
		   break;
	   }
	   else {
		   q.add(q.poll());
	   }
     }
   }
   return answer;
   
}
 
 public static boolean turn (Queue<Person> q, int n) {
	 boolean remove=true;
	 Person v = q.peek();
	 for(int i=0;i<n;i++) {
	    	q.add(q.poll());
	    	if(q.peek().getValue()>v.getValue()) remove=false; 	
	    }
	 return remove;
 }
 
 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));
 }
}
class Person{
	int id;
	int value;
	
	Person(int id , int value){
		this.id = id;
		this.value=value;
	}
	
	int getId() {
		return id;
	}
	int getValue() {
		return value;
	}
}

✔️ 강의 답은
만약에 우선순위가 큰게 있다면 바로 맨끝에 추가하기
순서가 기존과 다른게 엉망이지만 순서가 엉망이어도 답은 구할 수 있는 범우이이다.

import java.util.*;

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

class Main{
 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()) {
	   Person target = Q.poll();
	   for(Person x:Q) {
		   if(x.value>target.value) {
			   Q.offer(target);
			   target=null;
			   break;
		   }
		   
	   }
	   if(target!=null) {
		   if(target.id==m) {
			   answer++;
			   return answer;}
		   else answer++;
	   }
   }
   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));
 }
}

profile
꾸준하게 Ready, Set, Go!

0개의 댓글