[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์
2021. 6. 9. 15:08ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๐ค ํ์ด ๊ณผ์
user_id์ banned_id๊ฐ String ๋ฐฐ์ด์ ํํ๋ก ์ฃผ์ด์ง๊ฒ๋ฉ๋๋ค. banned_id๋ฅผ ๊ธฐ์ค์ผ๋ก user_id๋ฅผ ํ์ํ๋ฉฐ ๋งค์นญ๋๋ id๋ค์ ์ธ๋ฑ์ค๋ค์ ๋ฌถ์ด์ ์ ์ฅํด์ค๋ค ๋งค์นญ ๊ฐ๋ฅํ ๋ชจ๋ ์ผ์ด์ค์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์์ต๋๋ค. ์กฐํฉ์ ์ฌ๊ทํจ์๋ฅผ ํตํด์ ๊ตฌํด๋ณด์์ผ๋ฉฐ ํ๋์ banned_id์ ๋งค์นญ๋๋ user_id์ ์ธ๋ฑ์ค๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค Set์ ์ ์ฅํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ์์ต๋๋ค.
๐ฆ ๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ user_id: [String], _ banned_id: [String]) -> Int {
// ์ธ๋ฑ์ค๋ผ๋ฆฌ ๋งค์นญ, ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ banned_id์ ์ธ๋ฑ์ค,๊ฐ์ ๋งค์นญ๋๋ user_id๋ค์ ์ธ๋ฑ์ค ๋ฐฐ์ด
var matchUpWithIndex = [[Int]](repeating: [Int](), count: banned_id.count)
// Set์ ๊ฐ๋ฅํ ๋ชจ๋ ์ผ์ด์ค๋ค์ ์ ์ฅ
var matchUpCases = Set<[Int]>()
// "*" ๋ฌธ์๋ฅผ ์ฒดํฌํ๋ฉฐ ๋งค์นญํด๋ณด๋ ํจ์
func matching(_ user_id: String, _ banned_id: String) -> Bool {
if user_id.count != banned_id.count {
return false
}
let tempUser = user_id.map{$0}
let tempBanned = banned_id.map{$0}
for idx in 0..<tempUser.count {
if tempUser[idx] != tempBanned[idx] && tempBanned[idx] != "*" {
return false
}
}
return true
}
// ์ฌ๊ทํจ์๋ฅผ ํตํด ์กฐํฉ๋ค์ ๊ตฌํ์ฌ matchUpCases์ ์ ์ฅ.
func combination(_ curBannedIdx: Int, selected: [Int]) {
if curBannedIdx == banned_id.count {
// ex) 0๋ฒ์งธ banned_id์ [3, 2, 1] ๋งค์นญ == [1, 2, 3] ๋งค์นญ
// ๋งค์นญ๋๋ user ์ธ๋ฑ์ค๋ค์ ์์๋ ์ ๋ ฌํ์ฌ ๊ฐ์๊ฒ์ผ๋ก ์ฒ๋ฆฌ
matchUpCases.insert(selected.sorted(by: <))
} else {
var temp = selected
for userIdx in matchUpWithIndex[curBannedIdx] {
if temp.contains(userIdx) == false {
temp.append(userIdx)
combination(curBannedIdx + 1, selected: temp)
temp.removeLast()
}
}
}
}
for bannedIndex in 0..<banned_id.count {
for userIndex in 0..<user_id.count {
if matching(user_id[userIndex], banned_id[bannedIndex]) {
matchUpWithIndex[bannedIndex].append(userIndex)
}
}
}
combination(0, selected: [])
return matchUpCases.count
}
- ๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/64064
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์์ (0) | 2021.06.10 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.06.07 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์๋ฌผ์ ์ ์ด์ (0) | 2021.06.03 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋จ๊ณ ์นซ์ ํ๋งค (0) | 2021.06.02 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ํฉ์น ํ์ ์๊ธ (0) | 2021.06.01 |