티스토리 뷰

2022년 카카오 블라인드 채용 문제

 

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 

programmers.co.kr

 

 

주석으로 설명 대체.

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    let reports = Array(Set(report))                                // 중복을 제거
    var reportList: [String: [String]] = [:]                        // 신고당한 사람 : 신고한사람
    var result = Array(repeating: 0, count: id_list.count)          // 결과를 담을 배열
    var ids: [String: Int] = [:]                                    // 딕셔너리에 인덱스를 가져가기 위함
    
    for (index, id) in id_list.enumerated() {                       // 리스트로 받아온 인덱스를 기억해줌
        ids[id] = index
        reportList[id] = []                                         // 신고 명단도 만들기 위함
    }
    
    for report in reports {
        let reported = report.components(separatedBy: " ")          // 신고서를 "" 기준으로 분리
        
        reportList[reported[1]]!.append(reported[0])                // 신고한사람 신고당한 사람 순이므로 딕셔너리에는 0과 1을 바꿔서 append
    }
    
    for ban in ids {                                                // 인덱스를 가진 딕셔너리에서
        if reportList[ban.key]!.count >= k {                        // 신고당한 횟수가 k보다 크면
            reportList[ban.key]!.forEach { name in
                result[ids[name]!] += 1                             // 이름을 가진 인덱스를 찾아서 그 위치 인덱스를 이용하여 result에 count를 1증가
            }
        }
    }
    
    return result
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함