Post

[이것이 코딩 테스트다 with Python] 국영수(Java)

Goal

“이것이 코딩 테스트다 with Python” 교재의 문제를 분석하고 코드와 함께 이해해보기 위한 글입니다.

문제 분석

국영수 점수를 갖고 있는 학생을 Comparable 인터페이스를 상속하는 클래스로 구현해 정렬하는 프로그램으로 답을 구하면 됩니다.

코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class ImportantSubject { //p359
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        List<Student> list = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            int lang = Integer.parseInt(st.nextToken());
            int eng = Integer.parseInt(st.nextToken());
            int math = Integer.parseInt(st.nextToken());
            list.add(new Student(name, lang, eng, math));
        }

        Collections.sort(list);

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        for (Student s : list) {
            sb.append(s.getName()).append("\n");
        }
        bw.write(sb.toString());
        bw.close();
        br.close();
    }

    private static class Student implements Comparable<Student>{
        String name;
        int lang, math, eng;

        public Student(String name, int lang, int eng, int math) { //여기서 과목 순서를 잘못 넣어서 답이 안나왔다;;
            this.name = name;
            this.lang = lang;
            this.math = math;
            this.eng = eng;
        }

        public String getName() {
            return name;
        }

        @Override
        public int compareTo(Student o) {
            if (this.lang == o.lang) {
                if (this.eng == o.eng) {
                    if (this.math == o.math) {
                        return this.name.compareTo(o.name);
                    }
                    return o.math - this.math;
                }
                return this.eng - o.eng;
            }
            return o.lang - this.lang;
        }
    }
}

This post is licensed under CC BY 4.0 by the author.