TIL/알고리즘 공부

백준 10825번 Swift 알고리즘 연습 - 국영수_정렬

여의도사노비 2023. 3. 6. 12:11
728x90

어려운 문제는 아니었는데 이상하게 정렬이 잘 안되었던 문제...

결국 여러번 시행착오를 거쳤지만 답은 나왔다!

 

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 모든 경우의 수를 고려해주면 된다.
  2. 국어 점수가 같지 않다면 국어 성적을 기준으로 내림차순
  3. 국어 점수가 같고 영어 점수가 다르면 영어 성적을 기준으로 올림차순
  4. 국어 점수가 같고 영어 점수가 같고 수학 점수가 다르면 수학 성정을 기준으로 내림차순
  5. 마지막으로 다 같다면 아스키 코드 값 순서대로 정렬해주면 된다.

 

 

* 10825번

let n = Int(readLine()!)!
var data: [(String, Int, Int, Int)] = []

for _ in 0..<n {
    let input = readLine()!.split(separator: " ").map{ String($0) }
    let name = input[0]
    let korean = Int(input[1])!
    let english = Int(input[2])!
    let math = Int(input[3])!
    data.append((name, korean, english, math))
}

let sortedData = data.sorted {
    if $0.1 != $1.1 {
        return $0.1 > $1.1
    } else if $0.2 != $1.2 {
        return $0.2 < $1.2
    } else if $0.3 != $1.3 {
        return $0.3 > $1.3
    } else {
        return $0.0 < $1.0
    }
}

for i in sortedData {
    print(i.0)
}

 

 

정리(Today I Learned)

  1. 삼항연산자를 이용한 한줄 정리도 가능하긴한데 코드가 보기에 너무 복잡해보여 if문으로 정리하였다.