Dev.baelanche

[백준 11946] ACM-ICPC 본문

Data Structure & Algorithm/PS - JAVA

[백준 11946] ACM-ICPC

baelanche 2019. 7. 17. 21:17
반응형

 

위 문제를 풀기위한 구조들로

1. 팀 번호, 문제 번호 별로 푸는데 걸린시간을 저장한 배열

int t[][] = new int[n+1][m+1];

 

2. 팀 번호, 푼 문제 수, 총 걸린 시간을 저장한 클래스

를 만들어 주었다.

static class Team {
    int no;
    int solve;
    int time;
        
    Team(int no, int solve, int time) {
        this.no = no;
        this.solve = solve;
        this.time = time;
    }
}

 

먼저 RE, TLE, WA의 경우에는 팀 번호, 문제 번호 별로 걸린시간을 더해준다.

if(result.equals("WA") || result.equals("RE") || result.equals("TLE"))
    t[teamNo][problem] += 20;

 

AC인 경우에는 푼문제수 + 1, 문제 푸는데 걸린시간 갱신을 해준다.

문제를 두번 푼 경우는 인정되지 않으므로 한번 푼 문제는 더이상 처리하지 않도록 굉장히 큰 수로 배열에 넣어주었다.

if(t[teamNo][problem] >= 50000) continue;
    team[teamNo].solve++;
    team[teamNo].time += elapsed + t[teamNo][problem];
    t[teamNo][problem] = 50000;

 

마지막으로 랭킹순으로 정렬해주면 된다.

푼 문제수 내림차순 > 걸린 시간 오름차순 > 팀번호 내림차순 순으로 정렬한다.

Arrays.sort(team, new Comparator<Team>() {
    public int compare(Team t1, Team t2) {
        if(t1.solve > t2.solve) {
            return -1;
        } else if(t1.solve == t2.solve) {
            return t1.time - t2.time;
        }
        return 1;
    } 
});

 

 

전체소스

 

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int m = sc.nextInt();
        int q = sc.nextInt();
        
        int t[][] = new int[n+1][m+1];
        Team team[] = new Team[n+1];
        for(int i=0; i<=n; i++)
            team[i] = new Team(i, 0, 0);
        
        for(int i=0; i<q; i++) {
            int elapsed = sc.nextInt();
            int teamNo = sc.nextInt();
            int problem = sc.nextInt();
            String result = sc.next();
            
            if(result.equals("WA") || result.equals("RE") || result.equals("TLE"))
                t[teamNo][problem] += 20;
            
            else {
                if(t[teamNo][problem] >= 50000) continue;
                team[teamNo].solve++;
                team[teamNo].time += elapsed + t[teamNo][problem];
                t[teamNo][problem] = 50000;
            }
        }
        
        Arrays.sort(team, new Comparator<Team>() {
           public int compare(Team t1, Team t2) {
               if(t1.solve > t2.solve) {
                   return -1;
               } else if(t1.solve == t2.solve) {
                   return t1.time - t2.time;
               }
               return 1;
           } 
        });
        
        for(int i=0; i<=n; i++) {
            if(team[i].no == 0) continue;
            System.out.println(team[i].no + " " + team[i].solve + " " + team[i].time);
        }
    }
    
    static class Team {
        int no;
        int solve;
        int time;
        
        Team(int no, int solve, int time) {
            this.no = no;
            this.solve = solve;
            this.time = time;
        }
    }
}
반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 14582] 오늘도 졌다  (0) 2019.07.17
[백준 11947] 이런 반전이  (0) 2019.07.17
[백준 2420] 사파리 월드  (0) 2019.07.16
[백준 3009] 네 번째 점  (0) 2019.07.16
[백준 7453] 합이 0인 네 정수  (0) 2019.07.16
Comments