자신이 신고를 한 유저 중 신고를 k번 이상 당한 유저가 몇명이 있는지를 파악하는 문제이다.
해당 문제를 풀기 위해서 단계에 걸쳐서 문제를 풀었다.
1. 문자열 나누기를 통해서 신고한 유저와 신고당한 유저 나누기.
2. 신고를 한 사람은 같은 사람을 1번만 가능하게 중복 제거하기.
3. 신고를 몇번 당했는지 체크해주기.
4. 만일 신고를 k번 이상 당했다면 신고한 사람의 value 증가해주기.
5. id_list를 방문하면서 해당 사람의 value 값 answer에 넣기.
의 다섯 단계로 나누어서 해당 문제를 풀었다.
[회고]
한번에 할려고 하면 어려울 수 있지만 단계별로 나누어서 천천히 접근하면 어렵지 않게 느껴질 만한 문제이다.
천천히 하지만 확실히 접근하면서 문제를 풀자.
[코드]
import Foundation
func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
var answer = [Int]()
var id = id_list
//set을 사용해서 중복값을 제거하자.
var reports = Set<[String]>()
//reports 안에 report 문자열 파싱해서 넣기.
for i in report {
var temp: [String] = i.split(separator: " ").map {String($0)}
reports.insert(temp)
}
//몇번을 지목받았는지 확인할 변수
var numTarget = [String: Int]()
//자기가 지목한 사람중 몇명이 k를 넘었는지 저장할 변수
var numId = [String: Int]()
//변수 초기화
for i in id_list {
numTarget[i] = 0
numId[i] = 0
}
//지목받으면 + 해주기
for i in reports {
numTarget[i[1]]! += 1
}
//k이상 지목받았으면 지목한 사람의 변수 + 1
for i in reports {
if(numTarget[i[1]]! >= k){
numId[i[0]]! += 1
}
}
//id_list를 순회하면서 순서대로 몇명 정지 가능한지 변수에 저장.
for i in id_list {
answer.append(numId[i]!)
}
return answer
}