자바/백준

[백준 9076] 점수 집계

슈슈버거 2024. 8. 16. 01:50

문제

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


내가 작성한 코드

import java.util.*;
import java.io.*;

public class qor9076 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());

        for (int i = 0; i < T; i++) {
            String input[] = br.readLine().split(" ");
            ArrayList<Integer> score = new ArrayList<>();

            for (int j = 0; j < 5; j++) {
                score.add(Integer.parseInt(input[j]));
            }

            Collections.sort(score);
            score.remove(0);
            score.remove(score.size() - 1);

            int maxScore = Collections.max(score);
            int minScore = Collections.min(score);

            if (maxScore - minScore >= 4) {
                bw.write("KIN\n");
            } else {
                int sum = 0;
                for (int s : score) {
                    sum += s;
                }
                bw.write(sum + "\n");
            }
        }

        bw.flush();
        bw.close();
    }
}

 

맨 처음에는 int형 2차원 배열로만 생각을 했는데 그렇게 되면 max, min을 다 비교를 일일이 해줘야 하고

그걸 삭제한 후에도 index를 수정해줘야 하더라

그래서 sort를 쓸 수 있으면 좋겠다는 생각을 했고

 

그 결과 생각난게 ArrayList였다

바로 add를 통해 값을 다 넣어준 다음에 sort를 통해 정렬시키면 맨 처음과 마지막에 최고/최저점이 있으니

고민이 줄어든다.

 

그러고 나서도 바로 맨 처음과 마지막으로 다시 한번 비교를 할까했는데

명확하게 max, min이라는 연산도 사용해보고 싶어서 최종 결과를 구할 때는 두 연산을 사용해줬다

 

입력으로 오는 각각의 경우가 다른 경우다 보니

굳이 입력들을 한번에 배열로 저장할 필요가 없겠다 싶어 각 입력건에 대해 바로바로 수행하도록 for문을 작성해줬다.

 

출력은 한번에 하는것이 누락 걱정도 없으니 bw도 한번에