https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- comupters는 나를 포함하여 연결된 컴퓨터정보임
- 나를 제외한 연결된 노드들을 담는 nodeDic을 생성
- nodeDIc 구조는 [A:[A와 연결된 노드들]]
- 시작점을 바꿔가며 DFS를 이용하여 값이 다른(연결되지 않은) 부분들을 찾으려고 함
DFS
깊이 우선 탐색(DFS) Depth-First Search 탐색하려는 노드의 자식 노드부터 우선 탐색하는 방식 한개의 큐와 한개의 스택으로 구현 방문해야하는 노드 저장 스택(LIFO) 이미 방문한 노드를 저장하는 큐 (
01pkd95.tistory.com
import Foundation
func solution(_ n:Int, _ computers:[[Int]]) -> Int {
var nodeDic = [Int:[Int]]() // 인접한 노드들을 가지는 딕셔너리
for i in 0..<computers.count{
var arr = [Int]()
for j in 0..<computers[i].count{
if computers[i][j] == 1 && i != j{
arr.append(j)
}
}
nodeDic[i] = arr
}
//nodeDic 데이터 저장
var network = [[Int]]()
for i in 0..<n{
let arr = dfs(dic: nodeDic, start: i).sorted(by: <)
if !network.contains(arr){
network.append(arr)
}
}
return network.count
}
func dfs(dic: [Int:[Int]], start: Int) -> [Int]{
var queue = [Int]()
var stack = [start]
while !stack.isEmpty{
let node = stack.removeLast()
if queue.contains(node){ continue}
queue.append(node)
stack += dic[node] ?? []
}
return queue
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 여행경로 (Swift) (0) | 2023.12.21 |
---|---|
[프로그래머스] 전력망을 둘로 나누기 (Swift) (0) | 2023.12.20 |
[프로그래머스] 모음사전 (Swift) (0) | 2023.12.13 |
[프로그래머스] 숫자 변환하기 (Swift) (0) | 2023.12.12 |
[프로그래머스] 다리를 지나는 트럭 (Swift) (0) | 2023.11.15 |