-
백준 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문에서 내가 풀어보려했는데, 해결되지 않았다
'백준 > 정렬' 카테고리의 다른 글
1422 숫자의 신 (0) 2022.04.17 정렬 정리 (0) 2022.04.17 5635 생일 (0) 2021.10.27 2750 수 정렬하기 (0) 2021.10.18 1427 소트 인사이드 (0) 2021.10.18