ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 백준 올림픽
    알고리즘 2023. 3. 24. 00:05

     

     

    package main;
    
    import java.util.*;
    
    class medal implements Comparable<medal>{
    	int num,gold,sliver,bronze,rank;
    	public medal(int num,int gold,int sliver,int bronze,int rank) {
    		this.num=num;
    		this.gold=gold;
    		this.sliver=sliver;
    		this.bronze=bronze;
    		this.rank=rank;
    	}
    	@Override
    	public int compareTo(medal o) {
    		if(this.gold==o.gold) {
    			if(this.sliver==o.sliver) {
    				return o.bronze - this.bronze ;
    			}else {
    			return o.sliver - this.sliver;}
    		}else {
    		return o.gold - this.gold;}
    	}
    }
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		Main T = new Main();
    		Scanner sc = new Scanner(System.in);
    			
    		int n=sc.nextInt(); //나라수
    		int k=sc.nextInt(); // 알고 싶은 국가번호
    		
    		medal[] arr = new medal[n];
    	
    		for(int i=0; i<n;i++) {
    			int a=sc.nextInt();
    			int b=sc.nextInt();
    			int c=sc.nextInt();
    			int d=sc.nextInt();
    			arr[i] = new medal(a,b,c,d,1);
    		
    		}
    		
    		Arrays.sort(arr); //순서대로 정렬시켜준다.
    		
    		int cnt=1; //공통의 수세기
    		for(int i=1; i<n;i++) {
    			if((arr[i].gold == arr[i-1].gold)&&(arr[i].sliver == arr[i-1].sliver)&&
    					(arr[i].bronze == arr[i-1].bronze)) {
    				arr[i].rank= arr[i-1].rank;
    				cnt++;
    			}else {
    				arr[i].rank= arr[i-1].rank+cnt;
    				cnt=1;
    			}
    		}
    		
    		for(int i=0; i<n;i++) {
    			//System.out.println(arr[i].num+ " "+ arr[i].rank);
    			
    			  if(arr[i].num==k) { System.out.println(arr[i].rank); }
    			 
    		}
    	}
    }

     

    금,은,동에 따라 정렬해준다

    금은동이 같으면 같은 등수를 매겨야 하니까 그전의 랭킹과 같은 등수를 넣고 cnt증가 (cnt는 공통인게 몇개인지 센다)

    금은동이 같지 않다면 같은 등수였던 개수만큼 이전랭킹에 더해주고 cnt를 1로 초기화해줘야 다음번에도 셀 수 있음

     

     

     

    @Override
    	public int compareTo(medal o) {
    		if(this.gold==o.gold) {
    			if(this.sliver==o.sliver) {
    				return o.bronze - this.bronze ;
    			}else {
    			return o.sliver - this.sliver;}
    		}else {
    		return o.gold - this.gold;}
    	}

    gold가 같다면 slive비교 sliver가 같다면 bronze가 많은걸로 정렬시킨다. o.bronze - this.bronze 가 양수 = 내림차순

    '알고리즘' 카테고리의 다른 글

    [java] 백준 1138 한 줄로 서기  (0) 2023.03.25
    [java] 백준 2178 : 미로탐색  (0) 2023.03.25
    [java] 백준 2979 트럭주차  (0) 2023.03.23
    [java] ArrayList to Array , ArrayList to Array  (0) 2023.03.22
    [java] 피보나치 수열  (0) 2023.03.22
Designed by Tistory.