반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 "프로그래머스(Lv.3) - 네트워크" 문제를 풀었습니다.

 


 

Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 


풀이

이번 문제는 그래프 탐색 문제입니다.

그래프의 개수를 세면 되는 문제인데요. 

첫 레벨 3의 문제였는데 쉬워서 불안했던 문제였습니다.

 

이 문제가 편했던 점은 그래프가 input으로 주어진다는 점입니다.

주어진 computers를 그래프로 이용하고 visited를 하나씩 체크하며 dfs를 실행하면 됩니다.

그래프의 개수를 센 뒤 return 해주면 통과가 가능합니다!

 

3단계가 다 이 문제 같으면 너무 좋겠습니다... ㅠㅠ

 


전체 코드


      
import Foundation
func solution(_ n:Int, _ computers:[[Int]]) -> Int {
//dfs
var stack: [Int] = []
var visited: [Bool] = Array(repeating: false, count: n)
var result = 0
for i in 0..<n {
if !visited[i] {
result += 1 //네트워크 카운트
stack.append(i)
while !stack.isEmpty {
let top = stack.popLast()!
visited[top] = true
for j in 0..<n {
if j != top && computers[top][j] == 1 && !visited[j] {
stack.append(j)
}
}
}
}
}
return result
}

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형
유정주