suheang

[백준] | JAVA, 자바 | 14592번 - 2017 아주대학교 프로그래밍 경시대회 (Small) 본문

알고리즘

[백준] | JAVA, 자바 | 14592번 - 2017 아주대학교 프로그래밍 경시대회 (Small)

suheang 2024. 6. 17. 20:11

https://www.acmicpc.net/problem/14592


문제 요약 :

 순위는 다음과 같이 결정된다.

  • 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다.
  • 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다.
  • 점수의 총합과 제출 횟수가 같은 경우, 마지막으로 점수를 획득한 문제의 업로드 시간이 빠른 참가자가 더 높은 순위를 가진다.

참가자들의 순위를 계산하는 프로그램을 작성 ( 1등을 하는 참가자의 번호를 한 줄에 출력 )


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        int[] s = new int[n];
        int[] c = new int[n];
        int[] l = new int[n];

        int win = -1;
        int score = Integer.MIN_VALUE;
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            s[i] = Integer.parseInt(st.nextToken());
            c[i] = Integer.parseInt(st.nextToken());
            l[i] = Integer.parseInt(st.nextToken());
        }

        for (int i = 0; i < n; i++) {
            if (s[i] > score) {
                score = s[i];
                win = i;
            } else if (s[i] == score) {
                if (c[i] < c[win]) {
                    win = i;
                } else if (c[i] == c[win]) {
                    if (l[i] < l[win]) {
                        win = i;
                    }
                }
            }
        }
        System.out.println(win + 1);
    }
}

 

1. 참가자의 수 n 입력받기

2. 입력받은 n의 크기를 가지고 있는 배열 s, c, l 생성

3. 1등 한 참가자의 번호를 저장할 변수 win, 점수의 총합을 비교할 변수 score 생성

4. 입력받은 n 만큼 for 문 동작

4 - 1. 참가자의 점수, 제출 횟수, 업로드 시간 입력받기

5. 입력받은 n 만큼 for 문 동작

5 - 1. 만약 s[i]가 score 보다 크다면 score의 값을 s[i]의 값으로 변경하고 win의 값을 i로 변경

5 - 2. 만약 s[i]의 값이 score와 같다면 c[i]와 c[win]의 값을 비교해서 c[i]의 값이 c[win]의 값보다 작다면 win의 값을 i로 변경

5 - 3. 만약 c[i]의 값과 c[win]의 값이 같다면 l[i]와 l[win]의 값을 비교, l[i]의 값이 l[win]보다 작다면 win의 값을 i로 변경

6. 저장된 win의 값에서 +1 한 뒤 출력


https://www.acmicpc.net/problem/14593

14593번 - 2017 아주대학교 프로그래밍 경시대회 (Large) 역시 같은 코드로 해결할 수 있다.