You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
목표지점을 찾은 후 목표지점으로부터 bfs를 수행하여 배열 내에 최단거리를 저장한다. 목표지점으로부터 출발한 것이므로 bfs 수행 후 일괄적으로 -2를 해준다.
이 때 배열의 값이 1인 경우에는 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치이므로 -1으로 바꿔준다.
배열의 값이 0인 경우에는 -2를 해주면 음수 2가 되므로 bfs 수행 후의 값이 0인 경우라면 기존의 값 그대로를 유지할 수 있게 해주었다.
💬 풀이
func solution14940(){letNM=readLine()!.split(separator:"").map({Int(String($0))! })varmaps:[[Int]]=[]
for _ in 0..<NM[0]{letm=readLine()!.split(separator:"").map({Int(String($0))! })
maps.append(m)}letdx=[-1,1,0,0]letdy=[0,0,-1,1]func bfs(x:Int, y:Int){varqueue:[[Int]]=[[x, y]]
while !queue.isEmpty {letc= queue.removeFirst()letcx=c[0]letcy=c[1]
for i in 0...3{letnx= cx + dx[i]letny= cy + dy[i]
if nx <0 || ny <0 || nx > maps.count -1 || ny >maps[0].count -1{ continue }
if maps[nx][ny]==0{ continue }
if maps[nx][ny]==1{maps[nx][ny]=maps[cx][cy]+1
queue.append([nx, ny])}}}}// 목표좌표 2 찾기vardestination:[Int]=[]
for (idx, i) in maps.enumerated(){
if let jdx = i.firstIndex(of:2){
destination =[idx, jdx]
break
}}// 목표 좌표로부터 bfs 수행bfs(x:destination[0], y:destination[1])// 배열의 값이 0보다 크다면 -> 값 - 2// 1이라면 -> 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치이므로 -> -1
maps = maps.map({ $0.map({ $0 >0 ? ($0 ==1 ? -1: $0 -2): $0 })})
for i in maps {print(i.map({String($0)}).joined(separator:""))}}
The text was updated successfully, but these errors were encountered:
💬 문제
https://www.acmicpc.net/problem/14940
💬 Idea
💬 풀이
The text was updated successfully, but these errors were encountered: