2023. 1. 22. 19:43ㆍ알고리즘/문제
https://school.programmers.co.kr/learn/courses/30/lessons/138477
첫 번째 풀이
class Solution {
fun solution(k: Int, score: IntArray): List<Int> = score.indices.map { i->
score.slice(0..i).sortedDescending().filterIndexed { index , i ->
index<=k-1
}.minOf{ it }
}
}
문제를 읽어보니 함수형으로 금방 떠올라서 해보니 풀 수 있었다.
각 index 별로 값을 도출해야 하기 때문에 먼저 score의 index range를 이용해야 하나 했다.
그래서 score.indices를 사용했다.
score.indices를 하면 0..9 이렇게 나온다.
이제 score.indices.map { it : Int }인데
여기서 i까지 중 최댓값의 순서대로 앞에 k개 중 가장 작은 값을 찾아야 한다.
먼저
i=0 , score [0]
i=1 , score [0] score [1]
i=2 , score [0] score [1] score [2]
>>>> slice(0.. i) 하면 현재 들어오는 값 포함 list가 나온다.
이렇게 하나씩 올 때 sortedDescending()을 하면
이렇게 정렬이 되고
이제 앞에 k가 4면 0..3 부분을 가져와야 하는데
여기서 살짝 안 됐다.
앞부분을 가져오기 위해
slice(0 until k)를 사용했는데 하면서도 IndexOutOfBoundsException이 날 것 같았다.
k보다 작은 개수가 1개인 것부터 k 개 아래로는 처리가 안되었다.
그래서 고민하다가 filter를 생각했다.
k개 이하의 숫자들 중 최솟값을 구해야 하기 때문에
filterIndexed { }를 이용해
위와 같이 구했고
여기서
min 값을 구하면 된다.
결과는
'알고리즘 > 문제' 카테고리의 다른 글
프로그래머스 알고리즘 Level 1 과일 장수 (0) | 2023.01.23 |
---|---|
프로그래머스 알고리즘 Level 1 코틀린 기사단원의 무기 (0) | 2023.01.22 |
프로그래머스 알고리즘 Level 1 코틀린 가장 가까운 글자 (0) | 2023.01.22 |
프로그래머스 알고리즘 Level1 코틀린 크기가 작은 부분문자열 (0) | 2023.01.21 |
프로그래머스 알고리즘 Level1 코틀린 2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효 기간 (0) | 2023.01.21 |