알고리즘

[SWEA, 자바, 1983번] 조교의 성적 매기기

hminor 2024. 8. 29. 15:54

풀이

  • 요즘 기본 알고리즘 해결을 위한 언어를 자바로 고정하기 위해
  • SWEA로 기초를 닦으며 이런 저런 공부를 하고 있음.
  • 아래 코드는 단순하게 테스트 케이스 만큼 
  • 특정 학생의 성적을 조회하는 문제인데
  • 뭔가 자바여서 그런지 코드가 더럽긴하다.
  • 아래 코드 내용은 별 다른게 없어 해결 방법에 대한 건 생략하지만
  • 내림차순 정렬은 Collections.reverseOrder() 메서드로 할 수 있으며,
  • 기본 타입 배열을 Collection에 해당하는 배열에
  • 기본 값으로 깊은 복사를 하고자 할 땐 Arrays.asList()를 사용하기.
  • 그리고 같은 기본 타입 배열에 깊은 복사를 하고자 할 땐 아래의 코드를 사용하기.
    • System.Arrays.copyOf() 
      • 첫 번째 인자에는 배열
      • 두 번째 인자에는 배열의 길이를 넣기
    • Clone() 

 

import java.io.*;
import java.util.*;
public class _sw_1983 {
    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 tc = Integer.parseInt(br.readLine());
        String[] result_li = {"A+","A0","A-","B+","B0","B-","C+","C0","C-","D0"};
        for (int t=1; t<=tc; t++) {
            int[] NK = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            int N = NK[0]; // 학생 수
            int K = NK[1]; // 찾을 학생 번호
            Float[] li = new Float[N];

            for (int i=0; i<N; i++) {
                int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
                li[i] = score(arr);
            }
            List<Float> sort_li = new ArrayList<>(Arrays.asList(li));
            Collections.sort(sort_li, Collections.reverseOrder());

            for (int j=0; j<N; j++) {
                if (li[K-1].equals(sort_li.get(j))) {
                    bw.write(String.format("#%d %s",t,result_li[j/(N/10)])+"\n");
                    break;
                }
            }
        }
        bw.flush();
    }

    public static Float score(int[] arr) {
        return (float) (arr[0]*0.35+arr[1]*0.45+arr[2]*0.2);
    }
}