๐ Problem Solution/Programmers
[Swift] 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ฝ ๋ถ๋ ์ฌ์ฉ์
Fomagran ๐ป
2021. 6. 26. 14:55
728x90
๋ฐ์ํ
Problem
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ถ๋ ์ฌ์ฉ์
๊ฐ๋ฐํ ๋ด์์ ์ด๋ฒคํธ ๊ฐ๋ฐ์ ๋ด๋นํ๊ณ ์๋ "๋ฌด์ง"๋ ์ต๊ทผ ์งํ๋ ์นด์นด์ค์ด๋ชจํฐ์ฝ ์ด๋ฒคํธ์ ๋น์ ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋น์ฒจ์ ์๋ํ ์๋ชจ์๋ค์ ๋ฐ๊ฒฌํ์์ต๋๋ค. ์ด๋ฐ ์๋ชจ์๋ค์ ๋ฐ๋ก ๋ชจ์ ๋ถ๋
programmers.co.kr
Solution
1. ๋ถ๋ ์ฌ์ฉ์์ ์ ์ ์์ด๋๋ฅผ ๋น๊ตํ๋ค.
func isEqual(userId:String,bannedId:String) -> Bool {
if userId.count != bannedId.count { return false }
let uid = userId.map{String($0)}
let bid = bannedId.map{String($0)}
for (i,b) in bid.enumerated() {
if b != "*" && uid[i] != bid[i] {
return false
}
}
return true
}
2. ๋น๊ตํ ์์ด๋ ์ค ํด๋นํ๋ ์์ด๋๋ฅผ ๋ฐ๋ก ๋ชจ์๋๋๋ค.
func findBanIdEqualUserId(userId:[String],banId:[String]) -> [[Int]] {
var banArray = Array(repeating: [Int](), count: banId.count)
for (i,uid) in userId.enumerated() {
for (j,bid) in banId.enumerated() {
if isEqual(userId: uid, bannedId: bid) {
banArray[j].append(i)
}
}
}
return banArray
}
3. ๋ถ๋์ฌ์ฉ์๋ค์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค.
func insertBanIdsToResult(banArray:[[Int]],banIds:Set<Int>,result:inout Set<[Int]>,current:Int) {
for id in banArray[current] {
var newBanIds = banIds
newBanIds.insert(id)
if current != banArray.count - 1 {
insertBanIdsToResult(banArray:banArray,banIds: newBanIds,result:&result ,current: current+1)
}else if newBanIds.count == banArray.count {
result.insert(newBanIds.sorted())
}
}
}
4. ๊ฒฝ์ฐ์ ์์ ๊ฐฏ์๋ฅผ ๋ฐํํ๋ค.
return result.count
Source Code
728x90
๋ฐ์ํ