강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

공부합시다님의 프로필 이미지
공부합시다

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-B

강사님 질문있습니다!

작성

·

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님도 새해복 많이 받으세요!!

언제든 질문주세요. ㅎ

공부합시다님의 프로필 이미지
공부합시다

작성한 질문수

질문하기