728x90
๋ฐ์ํ
Problem
Solution
ํด๋น ๋ฌธ์ ๋ ์์ ํ์๊ณผ DFS๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์
๋๋ค.
1. edge๋ฅผ ์ด์ฉํด ๋ถ๋ชจ์ ์์์ ์ฐ๊ฒฐํด์ค๋๋ค.
func connectEdge(_ edges:[[Int]]) {
for edge in edges {
if pc[edge[0]] == nil {
pc[edge[0]] = [edge[1]]
}else {
pc[edge[0]]!.append(edge[1])
}
}
}
2. ๋๋์ ์์ ์๋ฅผ ์ ๋ฐ์ดํธ ํ๋ฉฐ DFS๋ก ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๋ ธ๋๋ค์ ์ฌ๊ทํด์ค๋๋ค.
์ฌ๊ธฐ์ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๋
ธ๋๋ค์ ๊ฐ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ค์ ์์๋ค์ ์ถ๊ฐํด์ค ๊ฒ์
๋๋ค.
์ฃผ์ํ ์ ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ ๋ฐ๋์ ์ญ์ ํด ์ฃผ์ด์ผ ๋ฌดํ ๋ฃจํ๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋งค๋ฒ ์์ ์ต๋ ์๋ฅผ ์
๋ฐ์ดํธ ํด์ค๋๋ค.
์์ ์๊ฐ ๋๋์ ์ ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง dfs๋ก ํ์ํด์ค๋๋ค.
maxCount = max(count.0,maxCount)
for node in visitableNodes {
var newVisitableNodes = visitableNodes
var newCount = count
let index = newVisitableNodes.firstIndex(of:node)!
newVisitableNodes.remove(at: index)
newVisitableNodes.append(contentsOf:pc[node] ?? [])
newCount = info[node] == 0 ? (count.0+1,count.1) : (count.0,count.1+1)
if newCount.0 > newCount.1 {
dfs(newCount, newVisitableNodes, info)
}
}
3. ๊ฐ์ฅ ํฐ ์์ ์๋ฅผ ๋ฐํํด์ค๋๋ค.
func solution(_ info:[Int], _ edges:[[Int]]) -> Int {
connectEdge(edges) dfs((1, 0), pc[0]!, info)
return maxCount
}
Source Code
728x90
๋ฐ์ํ
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] 2022 KAKAO BLIND RECRUITMENT ์ฌ๋ผ์ง๋ ๋ฐํ (0) | 2022.01.20 |
---|---|
[Swift] 2022 KAKAO BLIND RECRUITMENT ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ (0) | 2022.01.20 |
[Swift] 2022 KAKAO BLIND RECRUITMENT ์๊ถ๋ํ (1) | 2022.01.19 |
[Swift] 2022 KAKAO BLIND RECRUITMENT ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2022.01.19 |
[Swift] 2022 KAKAO BLIND RECRUITMENT k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2022.01.19 |
๋๊ธ