๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 10825๋ฒˆ ๊ตญ์˜์ˆ˜ ์ž๋ฐ” ๋ฌธ์ œ ํ’€์ด

by Wonit 2021. 2. 2.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 10825๋ฒˆ ๊ตญ์˜์ˆ˜ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ๋„ ์ •๋ ฌ ๊ธฐ์ค€ ์žฌ์ •์˜์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๋‹ค.


์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฐ”์˜ Comparator์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.


๋งŒ์•ฝ Comparator๊ณผ Comparable์— ๋Œ€ํ•ด์„œ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด Java์—์„œ Comparator๋กœ ์ •๋ ฌ ๊ธฐ์ค€ ๋ฐ”๊พธ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ‘๊ทผ๋ฒ•

์ด๋ฒˆ์—๋Š” ์ •๋ ฌ ์กฐ๊ฑด์ด 4๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

  1. ๊ตญ์–ด ์ ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ์ˆœ์„œ๋กœ
  2. ๊ตญ์–ด ์ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ์˜์–ด ์ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ
  3. ๊ตญ์–ด ์ ์ˆ˜์™€ ์˜์–ด ์ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ์ˆ˜ํ•™ ์ ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ์ˆœ์„œ๋กœ
  4. ๋ชจ๋“  ์ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ์ด๋ฆ„์ด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ

์—ฌ๊ธฐ์„œ 4๋ฒˆ์ด ์•„๋งˆ ์ œ์ผ ๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.

 

๋‹ค๋ฅธ ์กฐ๊ฑด๋“ค์€ ์ •๋ ฌ ๊ธฐ์ค€ ์žฌ์ •์˜์— ๋”ฐ๋ผ์„œ

if(o1.korean < o2.korean) {
  return 1;
}

๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ, 4๋ฒˆ ์กฐ๊ฑด์€ ์†Œ๋ฌธ์ž 26๊ฐœ, ๋Œ€๋ฌธ์ž 26๊ฐœ ์ด 50๊ฐœ๊ฐ€ ๋„˜๋Š” ์กฐ๊ฑด์„ ์ ์–ด์•ผ ํ•œ๋‹ค.


์ด ๋ฐฉ๋ฒ•์€ String.valueOf() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์„ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ๋ฐ, ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด๋‹ค.


๊ทธ๋ž˜์„œ ๋ฌธ์ž์—ด ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ String.compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

return o1.name.compareTo(o2.name)

์ •๋‹ต ์ฝ”๋“œ

public class Main {
    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 n = Integer.parseInt(br.readLine());

        Student[] students = new Student[n];

        for (int i = 0; i < n; i++) {
            String[] score = br.readLine().split(" ");
            students[i] = new Student(
                    score[0],
                    Integer.parseInt(score[1]),
                    Integer.parseInt(score[2]),
                    Integer.parseInt(score[3]));
        }
        Comparator<Student> myComparator = new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                if(o1.korean < o2.korean) {
                    return 1;
                }else if(o1.korean == o2.korean) {
                    if(o1.english > o2.english) {
                        return 1;
                    }else if(o1.english == o2.english) {
                        if(o1.math < o2.math) {
                            return 1;
                        }else if (o1.math == o2.math) {
                            return o1.name.compareTo(o2.name);
                        }
                    }
                }
                return -1;
            }
        };
        Arrays.sort(students, myComparator);
        for (int i = 0; i < n; i++) {
            bw.write(students[i].name + "\n");
        }


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

class Student {
    String name;
    int korean;
    int english;
    int math;

    Student(String name, int korean, int english, int math) {
        this.name = name;
        this.korean = korean;
        this.english = english;
        this.math = math;
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

๋ฌธ์ž์—ด ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ String.compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ํŠน์ • ๋ฌธ์ž์—ด๋งŒ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด compare() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๋ฉฐ String.charAt() ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ๋”ฐ๋กœ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€