백준_영역구하기_dfs

hankyulee·2021년 10월 6일
0

NeededToRetry

목록 보기
1/4

잘못된코드:

import Foundation

//var a = [Int:[Int]]()
//a[3] = [5,7]//되네


var info = readLine()!.components(separatedBy: " ").compactMap{Int($0)}
var rectTwoPoint : [Int:[Int]] = [Int:[Int]]()//만드는법 살펴보기.

for index in 0..<info.last! {
    var line = readLine()!.components(separatedBy: " ").compactMap{Int($0)}
    rectTwoPoint[index] = [line[0],line[1],line[2],line[3]]
}

var rectAxises = [[Int]]()

for rect in rectTwoPoint.values{
    for x in rect[0]...rect[2]{
        for y in rect[1]...rect[3]{
            if !rectAxises.contains([x,y]){
                rectAxises.append([x,y])
            }
            
        }
    }
}
print(rectAxises)

var allGraph : [[Int]] = [[Int]]()
for M in 0...info[1] {
    for N in 0...info[0]{
        allGraph.append([M,N])//init되고 append 가능.
    }
}
print(allGraph)

var residualGraph = Set(allGraph)
residualGraph.subtract(Set(rectAxises))



var go : [[Int]] = [[Int]]()
var result : Int = 0
var visit : [[Bool]] = Array(repeating: Array(repeating: true, count: info[1]+1), count: info[0]+1)
print(visit)
print(info[1])//7
print(info[0])//5

for a in residualGraph {
    visit[a[1]][a[0]] = false
}
print(123)
print(residualGraph)
print(visit)
var resultArray = [Int]()
var numberOf = 0
for point in residualGraph{
    numberOf = 0
    if visit[point[1]][point[0]] == true {//[3,0]
        continue
    }
    go.append(point)//[[3,0]]
    while !go.isEmpty{
        var last = go.popLast()!
        
        if visit[last[1]][last[0]] == true {
            continue
        }
        print("last: \(last[0]),\(last[1])")
        visit[last[1]][last[0]] = true
        
         var filtered = residualGraph.filter{
            if $0[0] == last[0] + 1 && $0[1] == last[1]{
                if visit[$0[1]][$0[0]] == false{
                    numberOf += 1
                    print("\($0[0]),\($0[1])발견1")
                    return true
                }
                else {return false}
            }
            if $0[0] == last[0] - 1 && $0[1] == last[1]{
                if visit[$0[1]][$0[0]] == false{
                    numberOf += 1
                    print("\($0[0]),\($0[1])발견2")
                    return true
                }
                else {return false}
            }
            if $0[0] == last[0]  && $0[1] == last[1] + 1{
                if visit[$0[1]][$0[0]] == false{
                    numberOf += 1
                    print("\($0[0]),\($0[1])발견3")
                    return true
                }
                else {return false}
            }
            if $0[0] == last[0]  && $0[1] == last[1] - 1{
                if visit[$0[1]][$0[0]] == false{
                    numberOf += 1
                    print("\($0[0]),\($0[1])발견4")
                    return true
                }
                else {return false}
            }
            return false
        }
        go += Array(filtered)
    }
    
    result += 1
    if numberOf == 0 { numberOf = 1}
    resultArray.append(numberOf)
    print("result: \(result)")
    print("numberOf: \(numberOf)")
}
print(result)
print(resultArray.sorted())

깨달은것:


//var a = [Int:[Int]]()
//a[3] = [5,7]//되네
    1. 위에 것 가능.
    1. .last! 해줘야한다.
    1. append할때는 init되어있어야한다. 예) var allGraph : [[Int]] = [Int]
  • 4.array[2][3] 가 좌표 2,3 같지만 3,2 이다.
  • visit을
  • 좌표로 생각해서 어렵게 접근했다.. 사각형셀 하나하나를 보면 더 쉬웠을것같다. 아래처럼 print 다 찍어보다가 잘못한 것을 찾아냈다.

0개의 댓글