본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 명예의 전당 Kotlin

by Echung 2023. 12. 29.

thumbnail

안녕하세요. 이번에는 프로그래머스 명예의 전당 문제를 풀어보려고 합니다. 

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Solution


class Solution {
    fun solution(k: Int, score: IntArray): IntArray {
        var answer: IntArray = intArrayOf()
        var list = mutableListOf<Int>()
        
        score.forEach {
            list.add(it)
            list.sort()
            
            if(list.size > k) {
                list.removeAt(0)
            }
            
            answer += list[0]
        }
        
        return answer
    }
}

 이번 문제는 sort 기능을 사용해서 최하위 점수를 제거해 주면서 발표 점수를 표현하는 방법으로 문제를 접근하였습니다.

 

1. 다른 사람 코드

class Solution {
    fun solution(k: Int, score: IntArray): IntArray = score.mapIndexed { index, i ->
        score.copyOfRange(0, index + 1).sortedDescending().run { getOrNull(k - 1) ?: minOf { it } }
    }.toIntArray()
}
저의 코드와 다르게 kotlin 스럽게 접근한 코드를 가져와보았습니다. 코드를 분석해보겠습니다.
 

코드 분석

1. score을 mapIndexed를 사용해서 인덱스와 값을 가져옵니다.

2. copyOfRange()를 통해서 Index 범위만큼만 배열을 따로 복사해 줍니다.

3. sortedDescending를 사용해서 내림차순 정렬을 해줍니다. 여기서 내림차순을 해주는 이유는 k번째 순위의 점수가 명예의 전당에서 내려오기 때문입니다.

4. 그리고 getOrNull을 통해서 null값이면 minOf를 통해 최솟값을 구해주고 null이 아니면 k - 1에 대한 값으로 넣어줍니다.


Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형