https://www.acmicpc.net/problem/11508
난이도 : 실버 5
태그 : 그리디, 정렬
설명
3개를 사면 가장 싼 가격의 제품 하나를 무료로 줍니다.
그냥 단순히 내림차순으로 정렬 후,
가장 비싼 물품과 그 다음으로 비싼 물품을 산 뒤, 3번째로 비싼 물품을 공짜로 받고,
4번째로 비싼 물품과, 5번째로 비싼 물품을 산 뒤, 6번째로 비싼 물품을 꽁자로 받는 과정을 반복하여 풀 수 있을 것 같습니다.
소스코드
fun main() =
print(Array(readln().toInt()) { readln().toInt() }
.sortedDescending() // 내림차순 정렬
.filterIndexed { i, _ -> i % 3 != 2 } // 3의 배수가 아닌 것만 필터링
.sum()) // 필터링한 값들의 합 출력
저 같은 경우는 내림차순으로 정렬한 뒤,
해당 상품이 3의 배수번째가 아닌 것(인덱스는 0부터 시작하므로 i % 3 != 2로 작성)을 필터링하고,
해당 상품들의 가격의 총 합을 구하였습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 14719번] [Kotlin] 빗물 (1) | 2023.11.30 |
---|---|
[백준 2503번] [Kotlin] 숫자 야구 (0) | 2023.11.29 |
[백준 16496번] [Kotlin] 큰 수 만들기 (0) | 2023.11.24 |
[백준 1181번] [Kotlin] 단어 정렬 (2) | 2023.11.20 |
[백준 4993번] [Kotlin] Red and Black (1) | 2023.11.20 |