Daily LeetCode Challenge - 1626. Best Team With No Conflicts

Min Young Kim·2023년 1월 31일
0

algorithm

목록 보기
60/198

Problem From.

https://leetcode.com/problems/best-team-with-no-conflicts/

오늘 문제는 scores 와 ages 배열이 주어졌을 때, 각 팀의 최고 점수를 구하는 문제였다.
최고 점수 구하기에는 제한사항이 있는데 나이가 어린 사람은 나이가 많은 사람보다 더 높은 점수를 가질 수 없다는 것이었다.

scores 배열과 ages 배열을 한데 묶고 ages 순으로 정렬한뒤 scores 순으로 정렬한다.
그 다음 정렬한 배열을 처음부터 탐색하면서 하나의 age 를 볼때 역순으로 돌아가면서 만약 그 합이 그 전 합보다 크다면 dp 에 저장하는 방식으로 하여 max score 를 구해낸다.

class Solution {
    
    private data class Player(val age: Int, val score: Int)
    
    fun bestTeamScore(scores: IntArray, ages: IntArray): Int {
        var answer = 0
        val pair = Array(scores.size){idx -> Player(ages[idx], scores[idx])}
        pair.sortWith(compareBy({ it.age },{ it.score }))
        val dp = Array(scores.size) { 0 }
        
        for(i in 0 until pair.size) {
            dp[i] = pair[i].score   
            for(j in i - 1 downTo 0) {
                if(pair[i].score < pair[j].score) continue
                dp[i] = maxOf(dp[i], dp[j] + pair[i].score)
            }
            answer = maxOf(answer, dp[i])
        }
        return answer
    }
}

위 풀이의 시간복잡도는 O(N^2) 이 된다.

profile
길을 찾는 개발자

0개의 댓글