# 풀이
- 빡구현이라고 불리는 문제를 처음 풀어봤는데 너무 지저분하다
import Foundation
func solution(_ friends:[String], _ gifts:[String]) -> Int {
var giftRecord: [String: [String: Int]] = [:]
var giftIndex: [String: Int] = [:]
var numberOfNextMonthGift: [String: Int] = [:]
var giftEnded: [String: [String:Bool]] = [:]
for friend in friends {
giftRecord[friend] = [:]
giftIndex[friend] = 0
numberOfNextMonthGift[friend] = 0
giftEnded[friend] = [:]
for f in friends {
giftRecord[friend]![f] = 0
giftEnded[friend]![f] = false
}
}
for gift in gifts {
let fromTo = gift.split(separator: " ").map { String($0) }
giftIndex[fromTo[0]]! += 1
giftIndex[fromTo[1]]! -= 1
if let _ = giftRecord[fromTo[0]]![fromTo[1]] {
giftRecord[fromTo[0]]![fromTo[1]]! += 1
} else {
giftRecord[fromTo[0]]![fromTo[1]] = 1
}
}
for me in friends {
// 주고받은 기록 살펴서 친구별로 선물지수 계산
for (receivedFriend, numberOfGift) in giftRecord[me]! {
// 상대가 나한테 준 선물 갯수가 내가 상대에게 준 선물 갯수랑 동일한 경우
if giftEnded[receivedFriend]![me]! { continue }
if giftEnded[me]![receivedFriend]! { continue }
if giftRecord[receivedFriend]![me]! == numberOfGift {
// 선물지수 계산 -> 선물지수 큰 사람이 작은 사람에게 받는다
if giftIndex[receivedFriend]! > giftIndex[me]! {
numberOfNextMonthGift[receivedFriend]! += 1
} else if giftIndex[receivedFriend]! < giftIndex[me]! {
numberOfNextMonthGift[me]! += 1
}
} else {
// 상대가 더 많이 나한테 준 경우
if giftRecord[receivedFriend]![me]! > numberOfGift {
numberOfNextMonthGift[receivedFriend]! += 1
} else {
// 내가 더 많이 받은 경우 -> 상대에게 하나 주기
numberOfNextMonthGift[me]! += 1
}
}
giftEnded[receivedFriend]![me]! = true
giftEnded[me]![receivedFriend]! = true
}
}
var maxGift = Int.min
for gift in numberOfNextMonthGift {
maxGift = max(maxGift, gift.value)
}
return maxGift
}