본문 바로가기
코딩테스트 준비(kotlin)/기본

[프로그래머스 kotlin] 할인 행사

by 1chanhue1 2024. 6. 21.

문제 풀이 코드 

fun solution(want: Array<String>, number: IntArray, discount: Array<String>): Int {
    var answer: Int = 0
    
    // 원하는 물품 수량을 Map으로 만듦
    val wantMap = mutableMapOf<String, Int>()
    for (i in want.indices) {
        wantMap[want[i]] = number[i]
    }


    // 할인 기간이 10일이므로, 10일마다 체크 ->  예를 들어 discount.size가 15일 경우, 10씩 한칸씩 이동하면서 6번 검사를 할 수 있게됨
    for (i in 0..discount.size-10){

        // 10일 간의 할인 목록을 자름
        val sublist = discount.slice(i until i + 10)

        // 현재 10일 동안의 아이템 수량을 카운트
        val discountMap = sublist.groupingBy { it }.eachCount()

        // 원하는 모든 물품이 수량만큼 있는지 확인
        if (wantMap.all { (key, value) -> discountMap.getOrDefault(key, 0) >= value }) {
            answer++
        }

    }

    return answer
}

 

groupingBy 함수를 잘 몰라서 참고했습니다! 

https://1chanhue1.tistory.com/51

 

[kotlin 코틀린] GroupBy와 GroupingBy

groupBy와 groupingBy 함수는 비슷한 기능을 제공하지만 사용 방법과 반환값이 다르다 !! groupBygroupBy 함수는Map>형태의 결과를 반환한다. 즉, 키와 키에 해당하는 요소들을 리스트로 묶은 맵을 반환한

1chanhue1.tistory.com