[BOJ] 16928 뱀과 사다리 게임

3150 단어 G5백준BFSswfitBFS

백준 16928번 뱀과 사다리 게임 (swift) [G5]

BFS(깊이 우선 탐색)

생각회로

  • 배열 두 개를 초기화한다.
    -- visitCount ( 방문 했는지, 안했는지 여부와 함께, 몇번 굴려야 가는지 )
    -- snakeLadder ( 뱀과 사다리 if snakeLadder[20] = 10 then 20번엔 10으로 가는 뱀이 있다.
  • 큐를 만든다.
  • 1을 큐에 넣고, 반복문을 들어간다.
  • queue pop 하고 6만큼 반복해서 주사위의 결과를 모두 확인
  • 다른 bfs 처럼 방문한 적이 없다면 queue에 추가.. 등

주의사항

  • 100초과 확인
  • 변수명이 깔끔해서 기분이 좋다.
import Foundation

class queue{
    var enq = [Int]()
    var deq = [Int]()
    
    var count: Int{
        return enq.count + deq.count
    }
    
    func push(_ a:Int){
        enq.append(a)
    }
    
    func pop()->Int{
        if deq.count == 0{
            deq = enq.reversed()
            enq.removeAll()
        }
        if deq.count == 0{
            return -1
        }
        return deq.popLast()!
    }
}


let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let N = input[0]
let M = input[1]

var snakeLadder = Array(repeating: 0, count: 100)
var visitCount = Array(repeating: 0, count: 100)
for _ in 0..<(N+M){
    let input = readLine()!.split(separator: " ").map{Int(String($0))!}
    snakeLadder[input[0]-1] = input[1] - 1
}

var q = queue()
q.push(0)

while q.count != 0 {
    let this = q.pop()
    
    for i in 1...6{
        if this+i >= 100{
            break;
        }
        let whereWeGo = snakeLadder[this+i] == 0 ? this+i :snakeLadder[this+i]
        if visitCount[whereWeGo] == 0 {
            visitCount[whereWeGo] = visitCount[this] + 1
            q.push(whereWeGo)
        }
    }
}
print(visitCount[99])

왜 초록색이 생겼지요?

좋은 웹페이지 즐겨찾기