와우,.........
어려웠음...
이게...... 카카오?
이게..... 내 수준?
두 가지 코드 작성함
물론 하나는 시간초과..
테스트코드 24개 중 1개 시간초과,...
피가 말라요...
접근방법을 다르게 해서 두 번째 코드 작성......
성공.......
1. 시간초과난 코드
// 22카카오 - 신고결과받기 - 3번 시간초과
import Foundation
func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
var reported = [String:Int]()
var user = [String:[String]]()
var suspended = [String]()
for i in id_list { //전체 이용자 딕셔너리
reported[i] = 0
}
// 중복신고 제거, user에 넣기.
var a = Array(Set(report.map{String($0)}))
for i in a {
let s = i.split(separator: " ").map{String($0)}
if user[s[0]] == nil {
user[s[0]] = [s[1]]
} else {
user[s[0]]!.append(s[1])
}
reported[s[1]]! += 1
}
// reported 딕셔너리에서 k만큼 신고받은 유저 찾기 -> suspended
for i in id_list {
if reported[i]! >= k {
suspended.append(i)
}
}
// 정지결과 메일 받을 유저 탐색
var result = [Int]()
for i in id_list {
var count = 0
for j in suspended {
if user[i] != nil {
if user[i]!.contains(j) {
count += 1
}
}
}
result.append(count)
}
return result
}
2. 통과코드
// 22카카오 - 신고결과받기 -2
import Foundation
func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
var userGetMail = [String:Int]()
var user = [String:[String]]()
var result = [Int]()
for i in id_list {
userGetMail[i] = 0
}
// 중복신고 제거, user에 넣기&count 피신고자:[신고자]
let a = Array(Set(report.map{String($0)}))
for i in a {
let s = i.split(separator: " ").map{String($0)}
if user[s[1]] == nil {
user[s[1]] = [s[0]]
} else {
user[s[1]]!.append(s[0])
}
}
// k만큼 신고받은 유저 찾기, 정지결과 메일 받을 유저 탐색
for i in user.keys {
if user[i]!.count >= k {
for j in user[i]! {
userGetMail[j]! += 1
}
}
}
for i in id_list {
result.append(userGetMail[i]!)
}
return result
}
휴식이 필요해..
'알고리즘문풀 with SWIFT > Programmers' 카테고리의 다른 글
swift ) 프로그래머스 - N개의 최소공배수 (0) | 2022.06.27 |
---|---|
swift ) 프로그래머스 - 스킬트리 (0) | 2022.06.23 |
swift ) 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2022.06.23 |
swift ) 프로그래머스 - 21카카오인턴 - 신규 아이디 추천 (0) | 2022.06.22 |
swift ) 프로그래머스 21카카오 인턴 - 숫자 문자열과 영단어 (0) | 2022.06.22 |