[BOJ] 16928 뱀과 사다리 게임
백준 16928번 뱀과 사다리 게임 (swift) [G5]
BFS(깊이 우선 탐색)
생각회로
- 배열 두 개를 초기화한다.
-- visitCount ( 방문 했는지, 안했는지 여부와 함께, 몇번 굴려야 가는지 )
-- snakeLadder ( 뱀과 사다리 if snakeLadder[20] = 10 then 20번엔 10으로 가는 뱀이 있다.
- 큐를 만든다.
- 1을 큐에 넣고, 반복문을 들어간다.
- queue pop 하고 6만큼 반복해서 주사위의 결과를 모두 확인
- 다른 bfs 처럼 방문한 적이 없다면 queue에 추가.. 등
주의사항
-- visitCount ( 방문 했는지, 안했는지 여부와 함께, 몇번 굴려야 가는지 )
-- snakeLadder ( 뱀과 사다리 if snakeLadder[20] = 10 then 20번엔 10으로 가는 뱀이 있다.
- 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])
왜 초록색이 생겼지요?
Author And Source
이 문제에 관하여([BOJ] 16928 뱀과 사다리 게임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@csk/BOJ-16928-뱀과-사다리-게임저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)