인프런 커뮤니티 질문&답변
강사님 질문있습니다!
작성
·
260
0
안녕하세요 강사님 새해 복 많이 받으세요~
1012번 문제는 인접행렬로 풀으셨는데 인접리스트로 푸는 방법은 없을까요?
"인접행렬로는 앞 문제에서 풀어봤으니까 인접리스트로 풀어봐야지!" 해서 풀어보고 있는데 dfs가 안되는것 같아서 질문드려봅니다!
import Foundation
var testCase = Int(readLine()!)!
var visited: [Bool] = []
var adjList: [[Int]] = [[]]
for _ in 0..<testCase {
let info = readLine()!.split(separator: " ").map { Int($0)! }
let M = info[0] // 주의! 보통 세로 가로이지만 여기서는 가로 세로이다.
let N = info[1]
let K = info[2]
print(search(N,M,K))
}
func search(_ N: Int, _ M: Int, _ K: Int) -> Int {
var result = 0
adjList = [[Int]](repeating: [], count: M)
visited = [Bool](repeating: false, count: M)
for _ in 0..<K {
let point = readLine()!.split(separator: " ").map { Int($0)! }
let x = point[0]
let y = point[1]
adjList[y].append(x)
}
// MARK: - 지금까지는 데이터 다 들어감 이제 dfs돌리기
for i in 0..<N {
if visited[i] == false {
print("now: \(i)")
result += 1
dfs(i)
}
}
return result
}
func dfs(_ node: Int) {
visited[node] = true
for i in 0..<adjList[node].count {
if visited[adjList[node][i]] == false {
dfs(adjList[node][i])
}
}
}언어는 swift인데 많이 비슷해서 읽으시는데는 문제 없으실겁니다!
답변 1
1
큰돌
지식공유자
안녕하세요 Daesoo Ahn 님 ㅎㅎ
일단 저 문제는 인접행렬로 풀지 않았습니다. 주어진 맵을 기반으로 풀었고 해당 부분은 2주차 개념강의에 설명되어있는데 참고부탁드립니다.
그리고 저 문제는 인접리스트로 풀면 안됩니다. 뭐 풀수야 있겠지만 삽으로도 할 수 있는 것을 숫가락으로 하는 느낌입니다. 주어진 맵으로 푸는게 더 좋습니다.
또한, 질문 주실 때 0주차 : 질문하시는 법 참고 하셔서 부탁드립니다.
감사합니다.
큰돌
지식공유자
기본이 안되어있는 것은 아니구요... ㅎㅎ 질문은 잘하셨는데 일단 스위프트는 아직 제가 익숙하지가 않아서 그 언어로는 디버깅을 잘 못드리고... C++로 해주시구요.ㅎㅎㅎ 해당 강의 듣고 해당 부분만 지켜주시면 조금 부탁드립니다.ㅎㅎㅎ
Daesoo님도 새해복 많이 받으세요!!
언제든 질문주세요. ㅎ






제일 중요한 '질문하는 기본'이 안되어있었네요
감사합니다.