프로그래머스 코딩테스트 [ 무인도 여행 ]
Github 링크 
- 이 문제는 주어진 배열에서 x를 제외한 숫자들의 연속된 부분의 전부 찾아서, 배열에 저장하여 리턴하는 문제다. 
 
- 아래와 같이 그림이 있다고 가정하면 (왼쪽), 결과물은 오른쪽과 같아야 한다. 
 
- 이 문제는 DFS로 푸는것이 제일 좋은 방법이라고 판단했다.
 
- 각 위치에서 퍼질수 있는 곳으로 계속 퍼지면서 영역을 만들고, 이미 방문한 곳은 체크를 해서 중복 방문을 방지한다. 
 
import Foundation
func solution(_ maps:[String]) -> [Int] {
    
    var newMaps = maps.map{Array($0)}
    
    
    let row = newMaps.count
    let column = newMaps[0].count
    
    
    let dx = [0,0,-1,1]
    let dy = [1,-1,0,0,]
    
    
    var visitedGraph = Array(repeating: Array(repeating: 0, count: column), count: row)
    
    
    func dfs (_ currentRow : Int, _ currentColumn : Int) -> Int {
        
        var sum = 0
        
        
        visitedGraph[currentRow][currentColumn] = 1
        
        
        
        
        if let currrentNum = Int(String(newMaps[currentRow][currentColumn])){
            sum += currrentNum
        }else{
            return 0
        }
        
        
        for i in 0...3{
            var newRow = currentRow + dx[i]
            var newCol = currentColumn + dy[i]
            
            
            
            
            if newRow >= row || newCol >= column || newRow < 0 || newCol < 0 || visitedGraph[newRow][newCol] == 1{
                continue
            }
            
            
            sum += dfs(newRow, newCol)
        }
        return sum
    }
    
    
    var ans : [Int] = []
    
    for i in 0..<row{
        for j in 0..<column{
            
            
            if (visitedGraph[i][j] == 1 || newMaps[i][j] == "X") {
                continue
            }else{
                ans.append(dfs(i, j))
            }
        }
    }
    
    
    ans = ans.isEmpty ? [-1] : ans.sorted(by: <)
    return ans
}