티스토리 뷰

코드카타

 

신고 결과 받기

 

문제

 

신고한 유저에게 날라갈 정지메일 수의 리스트를 반환하는 문제이다.

동일한 유저에 대한 신고 횟수는 1회로 처리되므로 신고 내역 리스트는 중복처리가 필요하다.

 

 

테스트케이스

 

따로 추가할 테스트케이스는 없는 것 같다.

 

 

풀이

class Solution {
    fun solution(id_list: Array<String>, report: Array<String>, k: Int): List<Int> {
    	
        // 동일한 유저에 대한 신고는 한 번으로 제한되므로 중복된 신고내역 제거
    	var reportSet = report.toSet()
		
        // 신고당한 유저들을 저장할 맵 (키: 신고 당한 사람, 값: 신고 당한 횟수)
        var reportMap = mutableMapOf<String, Int>()
        
        // 신고당한 사람들을 찾아 신고 당한 횟수를 저장한다
        reportSet.forEach{
            val key = it.split(' ')[1] // 신고 당한 사람 이름
            reportMap[key] = reportMap.getOrDefault(key, 0) + 1 // 신고횟수 1추가
        }
		
        // 정지당한 이용자로 구성되어 있는 맵
        var stopMap = reportMap.filterValues { it >= k } 
		
        // 메일을 보낼 신고자들을 저장할 맵 (키: 신고자 이름, 값: 메일 보낼 횟수)
        var resMap = mutableMapOf<String, Int>()
        
        // 유저수만큼 키를 생성하고 모든 키값을 0으로 초기화한다
        id_list.forEach { resMap[it] = 0 }
        
        // 신고자에게 보낼 메일 갯수를 저장한다
        reportSet.forEach {
            val key = it.split(' ')[0] // 신고자 이름
            if (stopMap.contains(it.split(' ')[1])) { // 신고당한 사람이 정지대상이라면
                resMap[key] = resMap.getOrDefault(key, 0) + 1 // 해당 신고자에게 보낼 메일 횟수 1증가
            }
        }
        
        return resMap.values.toList() // 결과 맵의 키값들을 리스트로 변환하여 반환한다
    }
}

신고 당한 사람들의 신고 누적 횟수를 저장할 맵과

신고자들에게 보낼 메일 횟수를 저장할 맵을 선언하여 문제를 해결하면 된다. 

 

 

맵을 리스트로 변환하기

val map = mapOf("a" to 1, "b" to 2, "c" to 3)
    
val keyList = map.keys.toList() // 출력: [a, b, c]
val valueList = map.values.toList() // 출력: [1, 2, 3]
val entryList = map.entries.toList() // 출력: [a=1, b=2, c=3]

맵의 키나 값만 가져와서 리스트르 변환할 수도 있고,

맵의 엔트리(Map의 각 키-값 쌍을 나타내는 객체)를 리스트로 변환할 수도 있다.

 

 

회고

해당 문제를 해결하려면 맵을 써야한다는 느낌은 있었는데

어떤 맵을 생성해서 어떤 키-값으로 초기화 해야하는지 감을 잡기가 어려웠던 것 같다.

 

맵은 여러 개의 값이 담긴 요소를 가지고 있는 리스트를 다룰 때 유용하게 쓸 수 있다.

이번 문제를 풀어보며 맵을 다루는 숙련도가 좀 올라간 느낌이고,

비슷한 유형의 문제가 나오면 맵을 어떤식으로 구성할지를 우선적으로 생각해봐야겠다. 

 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함