Uknow's Lab.
article thumbnail

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

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

난이도 : 실버 4
태그 : 정렬

 

 

설명

국어는 내림차순,

영어는 오름차순,

수학은 내림차순,

이름으로 오름차순 하는 문제입니다.

 

편의상 별도의 data class인 Student를 만들어 풀이하였습니다.

 

 

 

소스코드

import java.util.*

private data class Student(var name: String, var kor: Int, var eng: Int, var math: Int)

fun main() {
    val br = System.`in`.bufferedReader()

    val n = br.readLine().toInt()

    val students = Array(n) { Student("", 0, 0, 0) }

    repeat(n) {
        val st = StringTokenizer(br.readLine())
        students[it].name = st.nextToken()
        students[it].kor = st.nextToken().toInt()
        students[it].eng = st.nextToken().toInt()
        students[it].math = st.nextToken().toInt()
    }

    // 디폴트가 오름차순
    students.sortWith(
        compareBy(
            { -it.kor }, // -를 붙이면 내림차순
            { it.eng },
            { -it.math },
            { it.name }
        )
    )

    students.forEach { println(it.name) }
}

 

sortWtih, compareBy를 사용하여 복수의 조건을 갖고 정렬을 진행할 수 있습니다.

조건을 넣을 때, 디폴트로 오름차순이며, -를 붙여 내림차순으로 정렬할 수 있습니다.

 

마지막으로 forEach를 통해 students 배열 내 원소를 돌며 출력합니다.

 

 

후기

여러개의 조건을 갖고 정렬을 하는 문제였습니다.

-를 붙여 내림차순으로 정렬할 수 있는 건 처음 알았네요.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.