ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 8979 올림픽
    백준/정렬 2021. 11. 11. 22:59

     

     

    반례를 찾을 수 없어서. 일단 부분점수 45 점을 맞았지만, 코드를 올린다.

     

    <부분점수 45점 맞은 코드>

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.PriorityQueue;
    import java.util.StringTokenizer;
     
    
    class Medal implements Comparable<Medal> {
    	int country;
    	int g;
    	int s;
    	int c;
    	
    	public Medal(int country, int g, int s, int c) {
    		this.country = country;
    		this.g= g;
    		this.s =s;
    		this.c=c;
    	}
    		@Override
    		public int compareTo(Medal o) {
    			if(this.g==o.g) {
    				if(this.s==o.s) {
    					return -(this.c-o.c);
    				}else return -(this.s-o.s);
    			}else return - (this.g-o.g);
    		}
    	}
    
    
    
    public class Main {
    	
    	static int N;
    	static int M;
    	
    	
    	public static void main(String[] args) throws IOException {
    	
    	
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    		PriorityQueue<Medal> pq = new PriorityQueue<Medal>();
    		N = Integer.parseInt(st.nextToken());
    		M = Integer.parseInt(st.nextToken());
    		
    		
    		for(int i =0; i<N;i++) {
    			StringTokenizer st1= new StringTokenizer(br.readLine(), " " );
    			int country= Integer.parseInt(st1.nextToken());
    			int g= Integer.parseInt(st1.nextToken());
    			int s = Integer.parseInt(st1.nextToken());
    			int c = Integer.parseInt(st1.nextToken());
    			
    			pq.offer(new Medal(country,g,s,c));
    		}
    		
    	
    		int rank =1;
    		Medal a = pq.poll();
    		if(a.country==M) {
    			System.out.println(rank);
    			System.exit(0);
    		}
    		
    		
    		while(!pq.isEmpty()) {
    			int same =0;
    			Medal b = pq.poll();
    			if(a.g==b.g && a.s==b.s&&a.c==b.c) {
    				if(b.country == M) {
    					System.out.println( rank);
    					System.exit(0);
    				}else {
    					same++;
    					rank+=same;
    					a=b;
    				
    				
    				}
    			}else {
    				if(b.country == M) {
    					System.out.println(rank+1);
    					System.exit(0);
    				}else {
    					rank = rank+1;
    					a=b;
    				
    					
    				}
    			}
    		}
    		
    
    		
    		
    	}
    		}

    왜 안될까.....?

     

    참고자료 블로그의 코드를 거의 많이 참고했고, while문에서 내가 풀어보려했는데, 해결되지 않았다

     

     

    참고자료: https://soboruya.tistory.com/43

    '백준 > 정렬' 카테고리의 다른 글

    1422 숫자의 신  (0) 2022.04.17
    정렬 정리  (0) 2022.04.17
    5635 생일  (0) 2021.10.27
    2750 수 정렬하기  (0) 2021.10.18
    1427 소트 인사이드  (0) 2021.10.18

    댓글

Designed by Tistory.