본문 바로가기
Problem Solving

[Swift] 프로그래머스 신고 결과 받기(lv. 1)

by DuncanKim 2023. 2. 23.
728x90

[Swift] 프로그래머스 신고 결과 받기(lv. 1)

 

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

 

2. 접근

'메일'이 보내진 횟수를 세야하는 것이 포인트이다.

한 사람이 동일 유저를 신고하는 것은 1회로 처리한다는 점도 유의해야 한다.

그래서 reportCount 딕셔너리에는 id를 key로, set을 value로 만들어 신고한 사람이 총 몇 명인지 셀 수 있게 해주었다.

mailCount는 reportCount의 set의 크기 만큼 올라갈 것이다.

 

그러면 답변에는 id_list와 동일하게 순서를 하여 메일을 받을 숫자들을 append 해준다. 그러면 답변이 구해진다.

 

문자열을 잘 분해하여 딕셔너리를 잘 활용하여 숫자를 카운팅하는, 구현 문제였다.

 

 

3. 코드

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    var reportCount: Dictionary = [String : Set<String>]()
    var mailCount: Dictionary = [String : Int]()
    for i in id_list {
        reportCount[i] = Set<String>()
        mailCount[i] = 0
    }
    for j in report {
        reportCount[String(j.split(separator: " ")[1])]!.insert(String(j.split(separator: " ")[0]))
    }
    for (_, value) in reportCount {
        if value.count >= k {
            for j in value {
                mailCount[j]! += 1
            }
        }
    }
    var answer = [Int]()
    for i in id_list {
        answer.append(mailCount[i]!)
    }
    
    return answer
}
728x90

댓글