프로그래머스 Level 1 코틀린 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기

2023. 1. 24. 18:22알고리즘/문제

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

 

프로그래머스

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

programmers.co.kr

1. 첫 번째 풀이

함수형을 통한 풀이 BUT 시간 초과로 다시 생각함

2. for문을 통한 풀이 

class Solution {
    fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
        val cntHashMap = LinkedHashMap<String, Int>()
        val reportHashMap = LinkedHashMap<String, MutableList<String>>()
        val answer = IntArray(id_list.size) { 0 }
        var answerIndex = 0

        id_list.forEach { id ->
            cntHashMap[id] = 0
            reportHashMap[id] = mutableListOf()
        }

        report.map {
            it.split(" ")
        }.toSet().map { it[1] }.forEach { id ->
            cntHashMap[id] = cntHashMap[id]!! + 1
        }

        report.map { it.split(" ") }.toSet().forEach {
            reportHashMap[it[0]]!!.add(it[1])
        }

        reportHashMap.forEach {
            it.value.forEach { id ->
                if (cntHashMap[id]!! >= k) {
                    answer[answerIndex] += 1
                }
            }
            answerIndex++
        }

        return answer
    }
}

함수형 + LinkedHashMap을 이용한 풀이로 성공

 

BUT! 함수형만으로 풀고 싶었음.

 

함수형 풀이( 다른 사람의 풀이를 참고함 이게 베스트인 것 같다. )

class Solution {
    fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray =
    report
            .map { it.split(" ") }
            .groupBy { it[1] }
            .asSequence()
            .map { it.value.toHashSet() }
            .filter { it.size>=k }
            .flatten()
            .map { it[0] }
            .groupingBy { it }
            .eachCount()
            .run { id_list.map { getOrDefault(it,0) }.toIntArray() }
}