[プログラマ]アクセス長SWIFT


プログラマ-アクセス長
私の答え
  • 最初に11*11配列を作成した後,アクセスした箇所を1としてチェックし,1接続の個数を求めたが,1接続した箇所にアクセスしていないためDictionaryを用いて解いた.
  • (x,y)->(x 2,y 2)の値をKey、(x,y)->(x 2,y 2)と(x 2,y 2)->(x,y 2)->(x,y)として使用するので、重複をチェックして解きほぐす.
  • import Foundation
    
    func solution(_ dirs:String) -> Int {
        
        let direction = dirs.map{ $0 }
        
        var arr: [String:Int] = [:]
        
        var x = 5
        var y = 5
        for i in direction{
            let x2 = x
            let y2 = y
            if i == "U"{
                x -= 1
            }else if i == "D"{
                x += 1
            }else if i == "L"{
                y -= 1
            }else if i == "R"{
                y += 1
            }
            if x >= 0 && x <= 10 && y >= 0 && y <= 10 {
                // 방문한 곳 체크
                if arr["\(x2)\(y2)->\(x)\(y)"] == nil && arr["\(x)\(y)->\(x2)\(y2)"] == nil{
                    arr["\(x)\(y)->\(x2)\(y2)"] = 1
                }
               
            }else{
                if x < 0 {
                    x = 0
                }
                if x > 10 {
                    x = 10
                }
                if y < 0{
                    y = 0
                }
                if y > 10{
                    y = 10
                }
            }
        }
        
        return arr.count
    }